在postgres中如何删除所有列,但从表中删除一些特定的列

时间:2015-05-05 12:53:49

标签: sql postgresql psql

假设我在表格中有8列A B C D E F G H,我想从表中删除除C和E之外的所有列。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

根据我的理解,只有不包含在drop列列表中才能实现此目的的唯一方法,意味着只排除那些你不想要DROP的列。然后使用ALTER Table with DROP Column命令

你可以在PostgreSQL中以这种方式DROP多列

ALTER TABLE table DROP COLUMN A, DROP COLUMN B, DROP COLUMN D, DROP COLUMN F, DROP COLUMN G, DROP COLUMN H;

答案 1 :(得分:1)

如果您只知道要保留的那些,而不是您想要保留的那些,您可以这样做:

DO $$
DECLARE
    crow record;
    excludes varchar[] := array['C', 'E'];
    yourtab varchar := 'a_table';
BEGIN
    FOR crow IN
        SELECT * FROM information_schema.columns WHERE table_schema = 'public' and table_name = yourtab and column_name != ALL(excludes)
    LOOP
        EXECUTE format ('ALTER TABLE %s DROP COLUMN %s', yourtab, crow.column_name);
    END LOOP;
END;
$$ language plpgsql