2017-10-24 10 views
0

同じデータベース(postgresql)に2つのスキーマがあります。別のschema.table.columnのカラムの内容を更新するpostgresql

schema1

schema2

各スキーマは、表usersmail columnを有しています。

は、どのように私は私が試したすべての行

ためschema2.usersにメール欄にschema1.usersでメール欄からコンテンツをコピーすることができます。

update schema1.users 
set mail=(select mail from schema2.users); 

が、うまくいきませんでした。あなたは2つのテーブルを結合することができ、高度な

答えて

0

感謝。私はユーザーに参加しましたが、私はテーブルレイアウトがどのように見えるか分かりません。

あなたのテーブルの両方が、IDを一致している、それはこのようになりますと仮定すると、テーブルの結合UPDATEを行うことができます
update schema2.users 
set mail=s1.mail 
from schema1.mail as s1 
where users.user = s1.user 
0

UPDATE schema1.users a 
SET mail=b.mail 
FROM schema2.users b 
WHERE a.id=b.id 

を私がやっていることはテーブルの結合および更新しています一致するIDごとにschema1.usersでメールしてください。

EDIT:私はちょうどあなたが実際にschema2.usersメールを更新したいとお読みください。クエリは、このいずれかになります:私は別のスキーマ内の特定のテーブルに1つのスキーマから特定のテーブルをコピーするスクリプトでコマンドラインからやって何

UPDATE schema2.users a 
SET mail=b.mail 
FROM schema1.users b 
WHERE a.id=b.id 
0

ないエレガントなソリューションが、これはある

set search_path to schema1; 

\copy (select field1, nextfield, morefields from table_in_schema1) TO export.sql delimiter ',' ; 

set search_path to schema2; 

\copy table_name_in_schema2(matchingfield1, field_that_matches_next, another_field_forPosition2,) FROM 'export.sql' DELIMITER ',' ; 

新しいスキーマで1つのテーブルにエクスポートする必要があるいくつかのテーブルがありますので、これをスクリプト化して、スキーマ2にインポートするテーブル名を含むファイルを読み込み、以下のコマンドを使用してデータベースを作成します。これにより、2番目のスキーマのテーブルに約30個のテーブルがロードされます。

psql -d alltg -c "\i bulk_import.sql" 
+0

これは愚かです。既存の回答に示されているような簡単な「更新」が行います。 –

関連する問題