PostgreSQL跨多数据库使用dblink关联失败问题求助
PostgreSQL跨dblink关联不同数据库的正确方式
你犯的核心错误是:dblink函数一次只能连接到单个数据库,不能把两个已配置的连接名用逗号拼在一起当参数传。你之前的写法'db2_booking, bd1_uaa'被PostgreSQL当成了格式错误的连接字符串,所以才会报missing "=" after "db2_booking,"的解析错误。
下面是两种正确的实现方式:
方式一:本地关联两个远程库的查询结果
分别从两个远程库拉取包含关联字段的数据,然后在本地执行JOIN操作:
SELECT b.fullname, p.passenger_type_name FROM dblink('db2_booking','SELECT fullname, passenger_type_id FROM passenger_booking_details') AS b(fullname VARCHAR, passenger_type_id INT) JOIN dblink('bd1_uaa','SELECT id, passenger_type_name FROM passenger_types') AS p(id INT, passenger_type_name VARCHAR) ON b.passenger_type_id = p.id;
方式二:在远程库内部完成跨库关联
如果其中一个远程库已经配置了到另一个库的dblink(比如db2_booking能连bd1_uaa),可以在远程库内部完成关联后再返回结果,这种方式适合数据量较大的场景,能减少本地传输的数据量:
SELECT * FROM dblink('db2_booking', $$ SELECT b.fullname, p.passenger_type_name FROM passenger_booking_details AS b JOIN dblink('bd1_uaa','SELECT id, passenger_type_name FROM passenger_types') AS p(id INT, passenger_type_name VARCHAR) ON b.passenger_type_id = p.id $$) AS DATA(fullname VARCHAR, passenger_type_name VARCHAR);
内容的提问来源于stack exchange,提问作者tibu
相关产品推荐
相关产品推荐

