gpt4 book ai didi

postgresql - 在 postgres 中,如何删除所有共享相同前缀的列

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

我一直在使用以下代码删除所有共享相同前缀的表(在本例中删除名称以 'supenh_' 开头的所有表):

DO
$do$
DECLARE
_tbl text;
BEGIN
FOR _tbl IN
SELECT quote_ident(table_schema) || '.'
|| quote_ident(table_name) -- escape identifier and schema-qualify!
FROM information_schema.tables
WHERE table_name LIKE 'supenh_' || '%' -- your table name prefix
AND table_schema NOT LIKE 'pg_%' -- exclude system schemas
LOOP
-- RAISE NOTICE '%',
EXECUTE
'DROP TABLE ' || _tbl;
END LOOP;
END
$do$;

有没有办法修改此代码/或使用不同的脚本以便从一个特定的表中删除所有以相同前缀开头的列(例如,'patient1_') ?

最佳答案

你可以把它写成 PL/pgSQL 函数:

CREATE OR REPLACE FUNCTION drop_columns_with_prefix(tbl_name TEXT, column_prefix TEXT)  RETURNS VOID AS
$BODY$
DECLARE
_column TEXT;
BEGIN
FOR _column IN
SELECT quote_ident(column_name)
FROM information_schema.columns
WHERE table_name = tbl_name
AND column_name LIKE column_prefix || '%'
AND table_schema NOT LIKE 'pg_%'
LOOP
-- RAISE NOTICE '%',
EXECUTE
'ALTER TABLE ' || tbl_name || ' DROP COLUMN ' || _column;
END LOOP;
END
$BODY$
LANGUAGE plpgsql VOLATILE;

调用它使用:

SELECT drop_columns_with_prefix('tbl_name', 'prefix_');

或者如果您不想将其用作函数:

DO
$do$
DECLARE
_column TEXT;
BEGIN
FOR _column IN
SELECT quote_ident(column_name)
FROM information_schema.columns
WHERE table_name = 'tbl_name'
AND column_name LIKE 'prefix_%'
AND table_schema NOT LIKE 'pg_%'
LOOP
-- RAISE NOTICE '%',
EXECUTE
'ALTER TABLE tbl_name DROP COLUMN ' || _column;
END LOOP;
END
$do$

关于postgresql - 在 postgres 中,如何删除所有共享相同前缀的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27726424/

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