gpt4 book ai didi

postgresql - 根据名称删除多个列?

转载 作者:行者123 更新时间:2023-11-29 12:40:44 27 4
gpt4 key购买 nike

我正在 PostgreSQL 中创建过程/函数。我有一个数组,其中包含一些列名和一个临时表,如下所示;

columns_names varchar[] := array['A','B','C','D'];
table PQR(A integer, B integer, C integer, X integer, Y integer);

我想删除列 X 和 Y(即给定数组中不存在的列)。

有没有办法在单行语句中实现这个?

有点像

alter table pqr drop column where columnName not in column_names

最佳答案

如果您使用您提到的函数并且语言设置为 plpgsql,则可以执行此操作,那么动态 SQL 是可能的。

例如:

EXECUTE concat('ALTER TABLE ',
attrelid::regclass::text, ' ',
string_agg(concat('DROP COLUMN ', attname), ', ')
)
FROM pg_attribute
WHERE attnum > 0
AND NOT attisdropped
AND attrelid = 'PQR'::regclass
AND attname != ALL(array['A','B','C','D'])
GROUP BY attrelid;

它只会对一张表有效,否则会报错返回多行。如果您需要更多的表,那么您可以使用 LOOP 并在其中执行 execute 查询。

关于postgresql - 根据名称删除多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51667944/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com