我想要做的是连接2个数据库,并通过dblink将数据从一个数据库移动到另一个数据库。这是我所做的:
我已经在搜索问题两天了,找不到任何可以帮助我的东西。
SELECT dblink_connect('host=localhost user=postgres password=mypw dbname=nameofthedb')
create foreign data wrapper fdw validator postgresql_fdw_validator;
Create Server Ahmed FOREIGN DATA WRAPPER FDW OPTIONS (hostaddr '127.0.0.1',dbname 'nameofthedb');
CREATE USER MAPPING FOR postgres server Ahmed OPTIONS (user 'postgres', password 'mypw');
select dblink_connect('Ahmed') -- NOT WORKING
GRANT USAGE ON FOREIGN SERVER Ahmed TO postgres*/
select * from dblink
('Ahmed', 'select id from nameofthedb.public.pois') --not working
AS DATA(id INTEGER);
这是我得到的错误:
错误:无法建立连接
详细信息::连接信息字符串中“ Ahmed”后缺少“ =”
SQL状态:08001
答案 0 :(得分:1)
这是区分大小写的问题。
SQL不区分大小写,因此PostgreSQL会将字符串常量和双引号中的标识符之外的所有SQL转换为小写。
因此,外部服务器实际上称为ahmed
。
dblink
调用中的第一个参数是字符串文字'Ahmed'
,不转换为小写。
因此,dblink
首先查找命名连接Ahmed
,找不到它,然后寻找外部服务器Ahmed
,再次找不到它< / em>,最后求助于将其解释为连接字符串,这会导致错误消息。
解决方案::仅使用小写字母名称。