0

複数のデータベースがあり、それぞれに「認証」テーブルがあります。各テーブルで、制約を削除して新しいものに置き換えたいと思います。手動で行う必要がなければ、それは素晴らしいことです。

ALTER TABLE authentication DROP CONSTRAINT  uk_authentication_01;
ALTER TABLE authentication ADD CONSTRAINT uk_authentication_01 UNIQUE (authenticator, method);

スクリプトを使用して一括変更を行う方法はありますか?

4

2 に答える 2

2

シェルスクリプトでデータベースを反復処理できます。

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
于 2013-01-25T17:09:30.263 に答える
0

すべてのデータベースが同じサーバー上にあると思いますか?それが本当なら、あなたは単に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;
于 2013-01-25T12:41:03.237 に答える