Gab*_*nor 2 sql database postgresql
我有一个包含169个表的数据库
我在每个表中都需要这个列:
wid integer not null primary key
Run Code Online (Sandbox Code Playgroud)
我尝试了这个(感谢/sf/users/1927481/解决方案):
SELECT
'ALTER TABLE ' + T.name + ' ADD foo int NULL'
FROM
sys.tables AS T
WHERE
T.is_ms_shipped = 0
Run Code Online (Sandbox Code Playgroud)
但它在PostgreSQL上不起作用.
它只适用于tsql.
如何一次在每个表中添加此列?
Viv*_* S. 10
do $$
declare
selectrow record;
begin
for selectrow in
select
'ALTER TABLE '|| T.mytable || ' ADD COLUMN foo integer NULL' as script
from
(
select tablename as mytable from pg_tables where schemaname ='public' --your schema name here
) t
loop
execute selectrow.script;
end loop;
end;
$$;
Run Code Online (Sandbox Code Playgroud)
您可以使用以下选择测试是否所有表都使用新列进行了更改
select
table_name,COLUMN_NAME
from
INFORMATION_SCHEMA.COLUMNS
where
COLUMN_NAME='foo' -- <whatever your column name here>
Run Code Online (Sandbox Code Playgroud)
试试这个(将“public”更改为您正在执行此操作的任何模式)
DO $$
DECLARE
row record;
cmd text;
BEGIN
FOR row IN SELECT schemaname, tablename FROM pg_tables WHERE schemaname = 'public' LOOP
cmd := format('ALTER TABLE %I.%I ADD COLUMN foo SERIAL PRIMARY KEY ', row.schemaname, row.tablename);
RAISE NOTICE '%', cmd;
-- EXECUTE cmd;
END LOOP;
END
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
如果您按原样运行,它将显示命令。取消注释 EXECUTE 行以实际执行更改。
我会在事务中运行,这样如果您对结果不满意,您可以回滚。
请注意,类型是SERIAL
- 列类型将为整数,但还会创建表拥有的序列,并将列值默认为该序列的下一个值。
归档时间: |
|
查看次数: |
2296 次 |
最近记录: |