mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			243 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			243 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ==================================================================
 | |
| Name
 | |
| 
 | |
| dblink -- Returns a set from a remote database
 | |
| 
 | |
| Synopsis
 | |
| 
 | |
| dblink(text connstr, text sql [, bool fail_on_error])
 | |
| dblink(text connname, text sql [, bool fail_on_error])
 | |
| dblink(text sql [, bool fail_on_error])
 | |
| 
 | |
| Inputs
 | |
| 
 | |
|   connname
 | |
|   connstr
 | |
|     If two arguments are present, the first is first assumed to be a specific
 | |
|     connection name to use. If the name is not found, the argument is then
 | |
|     assumed to be a valid connection string, of standard libpq format,
 | |
|     e.g.: "hostaddr=127.0.0.1 dbname=mydb user=postgres password=mypasswd"
 | |
| 
 | |
|     If only one argument is used, then the unnamed connection is used.
 | |
| 
 | |
|   sql
 | |
| 
 | |
|     sql statement that you wish to execute on the remote host
 | |
|     e.g. "select * from pg_class"
 | |
| 
 | |
|   fail_on_error
 | |
| 
 | |
|     If true (default when not present) then an ERROR thrown on the remote side
 | |
|     of the connection causes an ERROR to also be thrown locally. If false, the
 | |
|     remote ERROR is locally treated as a NOTICE, and no rows are returned.
 | |
| 
 | |
| Outputs
 | |
| 
 | |
|   Returns setof record
 | |
| 
 | |
| Example usage
 | |
| 
 | |
| select * from dblink('dbname=postgres','select proname, prosrc from pg_proc')
 | |
|  as t1(proname name, prosrc text) where proname like 'bytea%';
 | |
|   proname   |   prosrc
 | |
| ------------+------------
 | |
|  byteacat   | byteacat
 | |
|  byteaeq    | byteaeq
 | |
|  bytealt    | bytealt
 | |
|  byteale    | byteale
 | |
|  byteagt    | byteagt
 | |
|  byteage    | byteage
 | |
|  byteane    | byteane
 | |
|  byteacmp   | byteacmp
 | |
|  bytealike  | bytealike
 | |
|  byteanlike | byteanlike
 | |
|  byteain    | byteain
 | |
|  byteaout   | byteaout
 | |
| (12 rows)
 | |
| 
 | |
| select dblink_connect('dbname=postgres');
 | |
|  dblink_connect
 | |
| ----------------
 | |
|  OK
 | |
| (1 row)
 | |
| 
 | |
| select * from dblink('select proname, prosrc from pg_proc')
 | |
|  as t1(proname name, prosrc text) where proname like 'bytea%';
 | |
|   proname   |   prosrc
 | |
| ------------+------------
 | |
|  byteacat   | byteacat
 | |
|  byteaeq    | byteaeq
 | |
|  bytealt    | bytealt
 | |
|  byteale    | byteale
 | |
|  byteagt    | byteagt
 | |
|  byteage    | byteage
 | |
|  byteane    | byteane
 | |
|  byteacmp   | byteacmp
 | |
|  bytealike  | bytealike
 | |
|  byteanlike | byteanlike
 | |
|  byteain    | byteain
 | |
|  byteaout   | byteaout
 | |
| (12 rows)
 | |
| 
 | |
| select dblink_connect('myconn','dbname=regression');
 | |
|  dblink_connect
 | |
| ----------------
 | |
|  OK
 | |
| (1 row)
 | |
| 
 | |
| select * from dblink('myconn','select proname, prosrc from pg_proc')
 | |
|  as t1(proname name, prosrc text) where proname like 'bytea%';
 | |
|   proname   |   prosrc
 | |
| ------------+------------
 | |
|  bytearecv  | bytearecv
 | |
|  byteasend  | byteasend
 | |
|  byteale    | byteale
 | |
|  byteagt    | byteagt
 | |
|  byteage    | byteage
 | |
|  byteane    | byteane
 | |
|  byteacmp   | byteacmp
 | |
|  bytealike  | bytealike
 | |
|  byteanlike | byteanlike
 | |
|  byteacat   | byteacat
 | |
|  byteaeq    | byteaeq
 | |
|  bytealt    | bytealt
 | |
|  byteain    | byteain
 | |
|  byteaout   | byteaout
 | |
| (14 rows)
 | |
| 
 | |
| 
 | |
| ==================================================================
 | |
| A more convenient way to use dblink may be to create a view:
 | |
| 
 | |
|  create view myremote_pg_proc as
 | |
|  select *
 | |
|  from dblink('dbname=postgres','select proname, prosrc from pg_proc')
 | |
|  as t1(proname name, prosrc text);
 | |
| 
 | |
| Then you can simply write:
 | |
| 
 | |
|    select * from myremote_pg_proc where proname like 'bytea%';
 | |
| 
 | |
| 
 | |
| ==================================================================
 | |
| Name
 | |
| 
 | |
| dblink_send_query -- Sends an async query to a remote database
 | |
| 
 | |
| Synopsis
 | |
| 
 | |
| dblink_send_query(text connname, text sql)
 | |
| 
 | |
| Inputs
 | |
| 
 | |
|   connname
 | |
|     The specific connection name to use.
 | |
| 
 | |
|   sql
 | |
| 
 | |
|     sql statement that you wish to execute on the remote host
 | |
|     e.g. "select * from pg_class"
 | |
| 
 | |
| Outputs
 | |
| 
 | |
|   Returns int. A return value of 1 if the query was successfully dispatched,
 | |
|   0 otherwise. If 1, results must be fetched by dblink_get_result(connname).
 | |
|   A running query may be cancelled by dblink_cancel_query(connname).
 | |
| 
 | |
| Example usage
 | |
| 
 | |
|   SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
 | |
|   SELECT * from 
 | |
|    dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1;
 | |
| 
 | |
| ==================================================================
 | |
| Name
 | |
| 
 | |
| dblink_get_result -- Gets an async query result
 | |
| 
 | |
| Synopsis
 | |
| 
 | |
| dblink_get_result(text connname [, bool fail_on_error])
 | |
| 
 | |
| Inputs
 | |
| 
 | |
|   connname
 | |
|     The specific connection name to use. An asynchronous query must
 | |
|     have already been sent using dblink_send_query()
 | |
| 
 | |
|   fail_on_error
 | |
| 
 | |
|     If true (default when not present) then an ERROR thrown on the remote side
 | |
|     of the connection causes an ERROR to also be thrown locally. If false, the
 | |
|     remote ERROR is locally treated as a NOTICE, and no rows are returned.
 | |
| 
 | |
| Outputs
 | |
| 
 | |
|   Returns setof record
 | |
| 
 | |
| Notes
 | |
|   Blocks until a result gets available.
 | |
| 
 | |
|   This function *must* be called if dblink_send_query returned
 | |
|   a 1, even on cancelled queries - otherwise the connection
 | |
|   can't be used anymore. It must be called once for each query
 | |
|   sent, and one additional time to obtain an empty set result,
 | |
|   prior to using the connection again.
 | |
| 
 | |
| Example usage
 | |
| 
 | |
| contrib_regression=#   SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
 | |
|  dblink_connect
 | |
| ----------------
 | |
|  OK
 | |
| (1 row)
 | |
| 
 | |
| contrib_regression=#   SELECT * from
 | |
| contrib_regression-#    dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1;
 | |
|  t1
 | |
| ----
 | |
|   1
 | |
| (1 row)
 | |
| 
 | |
| contrib_regression=#   SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[]);
 | |
|  f1 | f2 |     f3
 | |
| ----+----+------------
 | |
|   0 | a  | {a0,b0,c0}
 | |
|   1 | b  | {a1,b1,c1}
 | |
|   2 | c  | {a2,b2,c2}
 | |
| (3 rows)
 | |
| 
 | |
| contrib_regression=#   SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[]);
 | |
|  f1 | f2 | f3
 | |
| ----+----+----
 | |
| (0 rows)
 | |
| 
 | |
| contrib_regression=#   SELECT * from
 | |
|    dblink_send_query('dtest1', 'select * from foo where f1 < 3; select * from foo where f1 > 6') as t1;
 | |
|  t1
 | |
| ----
 | |
|   1
 | |
| (1 row)
 | |
| 
 | |
| contrib_regression=#   SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[]);
 | |
|  f1 | f2 |     f3
 | |
| ----+----+------------
 | |
|   0 | a  | {a0,b0,c0}
 | |
|   1 | b  | {a1,b1,c1}
 | |
|   2 | c  | {a2,b2,c2}
 | |
| (3 rows)
 | |
| 
 | |
| contrib_regression=#   SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[]);
 | |
|  f1 | f2 |      f3
 | |
| ----+----+---------------
 | |
|   7 | h  | {a7,b7,c7}
 | |
|   8 | i  | {a8,b8,c8}
 | |
|   9 | j  | {a9,b9,c9}
 | |
|  10 | k  | {a10,b10,c10}
 | |
| (4 rows)
 | |
| 
 | |
| contrib_regression=#   SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[]);
 | |
|  f1 | f2 | f3
 | |
| ----+----+----
 | |
| (0 rows)
 |