データベースから読み取っている情報を、別のテーブルに属するテーブルに挿入する必要があります。
私の情報は RECORD 変数にあります。それを my_row と呼びましょう。
やってみると明らかに
SELECT dblink_exec('INSERT INTO remote_table VALUES (my_row.*)');
my_row が誰であるかを認識しません。
他にどのようなオプションがありますか?
データベースから読み取っている情報を、別のテーブルに属するテーブルに挿入する必要があります。
私の情報は RECORD 変数にあります。それを my_row と呼びましょう。
やってみると明らかに
SELECT dblink_exec('INSERT INTO remote_table VALUES (my_row.*)');
my_row が誰であるかを認識しません。
他にどのようなオプションがありますか?
次のようなものを試してください:
SELECT dblink_exec('INSERT INTO remote_table VALUES '|| quote_literal(my_row.*));
アイデア - 動的 SQL を使用する。行をテキスト表現に変換するには、特殊文字をエスケープしてINSERT
ステートメントを作成します。
1 つのオプションを次に示します。
CREATE TABLE junk(a text, b text,c TIMESTAMP, d hstore);
DO
$BODY$
DECLARE
RecordVar junk%rowtype;
SqlCommand TEXT:= 'INSERT INTO junk(a,b,c,d) VALUES(';
BEGIN
RecordVar.a = 'junk''''a';
RecordVar.b = 'junkb';
RecordVar.c = NOW();
RecordVar.d = '"key1"=>"value1"';
SqlCommand := SqlCommand || '''' || RecordVar.a || '''' || ',' || '''' || RecordVar.b || '''' || ',' ||'''' || RecordVar.c || '''' || ',' ||'''' || RecordVar.d || '''' || ');';
RAISE NOTICE 'SQL = %',SqlCommand;
PERFORM dblink('dblink_logging',SqlCommand);
END;
$BODY$
Select a,b,c from junk;
junk'a|junkb|2013-01-28 09:53:22.308|"key1"=>"value1"
DROP TABLE junk;