PostgreSQL使用DBLINK跨库关联两表出现语法错误如何解决
错误原因
- 语法使用不符合PostgreSQL规范:
dblink扩展返回的是无结构记录集,必须在dblink()函数调用后直接通过AS 别名(字段名 字段类型...)的格式声明返回结果的结构,你将字段类型声明写在了嵌套子查询的别名括号中,触发了语法报错。 - 额外前置检查:如果是首次在当前库使用
dblink,需要先执行CREATE EXTENSION IF NOT EXISTS dblink;开启扩展,否则后续会报函数不存在的错误。
修正后的SQL脚本
-- 首次使用dblink先执行以下语句开启扩展,后续无需重复执行 -- CREATE EXTENSION IF NOT EXISTS dblink; SELECT * FROM public.users tb1 INNER JOIN ( SELECT * FROM dblink('dbname=db_employees','SELECT id FROM employees') AS tb2(userId character varying(40)) ) tb2 ON tb1.userId = tb2.userId WHERE tb1.userId = 'gfgfg-43436-htrewd-1111';
修改说明
去掉了原SQL中多余的嵌套括号,将字段类型声明直接放在dblink调用之后,明确指定函数返回结果的字段名和类型,符合PostgreSQL的语法要求。
内容的提问来源于stack exchange,提问作者JAN
相关产品推荐
相关产品推荐

