将值传递给PostgreSQL中的db_link_exec查询

时间:2013-01-28 12:53:48

标签: postgresql dblink

我需要将我正在从数据库中读取的一些信息插入到属于不同数据库的表中。

我在RECORD变量中有我的信息,我们称之为my_row。

显然,当我尝试

SELECT dblink_exec('INSERT INTO remote_table VALUES (my_row.*)');

它无法识别my_row是谁。

我还有其他选择吗?

2 个答案:

答案 0 :(得分:0)

尝试类似:

SELECT dblink_exec('INSERT INTO remote_table VALUES '|| quote_literal(my_row.*));

这个想法 - 使用动态SQL。要将行转换为其文本表示形式,请转义特殊字符并形成INSERT语句。

答案 1 :(得分:0)

这是一个选项:

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;