需要使用dblink插件
pgsql9.6版本以后自带
查看当前数据库所有插件
SELECT * FROM pg_extension;
在两个要跨库查询的库创建dblink
create extension if not exists dblink
建立两个要查询的表的连接
select dblink_connect('dblinktest','host=127.0.0.1 dbname=database2 user=postgres password=111111');
查询所有已链接的dblink
select dblink_get_connections();
跨库查询数据
SELECT * FROM dblink('dblinktest', 'SELECT * from database2_table2 ') as stu(id uuid, number int)
联合查询
SELECT * FROM dblink('dblinktest', 'SELECT * from database2_table2 ') as stu(id uuid, number int) join database1_table1 gra on gra.studentid = stu.id
以上步骤需要注意的是,
dblinktest:刚才创建的连接
//对跨库连接的表执行查询
'SELECT * from database2_table2'
//必须转化为一个临时表, 不然会要以下错误
SELECT * FROM dblink('dblinktest', 'SELECT * from database2_table2 ')
SQL 错误 [42601]: ERROR: a column definition list is required for functions returning “record”
(id uuid, number int) 需要和跨库连接的表的数据结果保持一致
不然会报一下错误
SQL 错误 [42804]: ERROR: remote query result rowtype does not match the specified FROM clause rowtype