我有多个数据库,每个都有表“身份验证”。在每个表中,我想删除一个约束并将其替换为一个新约束。如果我不必手动执行此操作,那就太好了。
ALTER TABLE authentication DROP CONSTRAINT uk_authentication_01;
ALTER TABLE authentication ADD CONSTRAINT uk_authentication_01 UNIQUE (authenticator, method);
有没有办法用脚本进行批量修改?
我有多个数据库,每个都有表“身份验证”。在每个表中,我想删除一个约束并将其替换为一个新约束。如果我不必手动执行此操作,那就太好了。
ALTER TABLE authentication DROP CONSTRAINT uk_authentication_01;
ALTER TABLE authentication ADD CONSTRAINT uk_authentication_01 UNIQUE (authenticator, method);
有没有办法用脚本进行批量修改?
您可以在 shell 脚本中迭代您的数据库:
for db in dbname1 dbname2 dbname3...
do
psql -d $db -U username << EOF
ALTER TABLE authentication DROP CONSTRAINT uk_authentication_01;
ALTER TABLE authentication ADD CONSTRAINT uk_authentication_01 UNIQUE (authenticator, method);
EOF
done
我假设所有数据库都在同一台服务器上?如果这是真的,您可以简单地执行 SELECT:
SELECT 'SELECT * FROM dblink_exec(''dbname=' || datname
|| '''::text, ''ALTER TABLE authentication
DROP CONSTRAINT uk_authentication_01;
ALTER TABLE authentication ADD CONSTRAINT uk_authentication_01
UNIQUE (authenticator, method);''::text);'
FROM pg_database WHERE datistemplate = false;
然后复制此查询的结果并运行它。
你需要那个 dblink 扩展:
CREATE EXTENSION dblink;