Обсуждение: Dataimport from remote db
Hello, i have several machines having the same database layout. Now i want import data from a remote machine. I tried something like this but maybe there is a better way in doing such a thing??? CREATE OR REPLACE FUNCTION import_sc(text) RETURNS int4 AS $$ DECLARE v_host ALIAS FOR $1; v_return int4; v_constr text; v_config record; temp record; BEGIN v_constr := 'hostaddr=' || v_host || ' dbname=config user=user password=pass'; -- connect to remote database PERFORM 'SELECT dblink_connect(''con'', v_constr);'; RAISE NOTICE 'connected'; FOR v_config in (SELECT * from dblink('''con''', 'SELECT * from config ') AS hc(id character(36), name text)) LOOP INSERT INTO config (id, name) values (v_config.id, v_config.name); END LOOP; PERFORM 'SELECT dblink_disconnect (''con'');'; v_return := 4; RETURN v_return; END; $$ LANGUAGE 'plpgsql'; But now I get: NOTICE: connected ERROR: could not establish connection DETAIL: missing "=" after "'con'" in connection info string CONTEXT: PL/pgSQL function "import_sc" line 13 at FOR over SELECT rows ********** Fehler ********** ERROR: could not establish connection SQL Status:08001 Detail:missing "=" after "'con'" in connection info string Kontext:PL/pgSQL function "import_sc" line 13 at FOR over SELECT rows What does that mean? Thank you very much. Tobias
"Schoenit, Tobias AT/BHL-ZTPS" <tobias.schoenit@schaeffler.com> writes: > -- connect to remote database > PERFORM 'SELECT dblink_connect(''con'', v_constr);'; > RAISE NOTICE 'connected'; > FOR v_config in (SELECT * from dblink('''con''', > 'SELECT * from config ') AS > But now I get: > NOTICE: connected > ERROR: could not establish connection > DETAIL: missing "=" after "'con'" in connection info string You've got too many quotes in the second dblink call (as indeed the error message shows, if you look carefully). I'm also pretty sure that the first PERFORM isn't really establishing a connection --- it looks to me like all it's doing is evaluating a constant string. You seem to be confused about the difference between PERFORM and EXECUTE. There is no need for EXECUTE here, so this would be sufficient: PERFORM dblink_connect('con', v_constr); regards, tom lane