Postgresql 创建存储数据库 link
Postgresql create stored database link
我知道在 Oracle 中可以创建存储的 dblink,然后在查询中使用它。例如:
创建 dblink 的脚本:
CREATE PUBLIC DATABASE LINK my_link CONNECT TO my_schema IDENTIFIED BY shema_password USING 'remote';
之后我们可以在查询中使用它:
SELECT * FROM some_table@my_link;
我没有找到适用于 Postgres 的相同解决方案。我不明白我们可以创建命名的 dblink 连接:
为此,我们必须使用 dblink_connect
和名称参数。但是创建的命名 dblink 将在会话关闭后销毁。
或者我们可以为每个查询创建 dblink 连接:
SELECT *
FROM dblink('host= port= dbname= user= password=',
'select table_schema, table_name from information_schema.tables where table_schema = ''data''') AS t1 (table_schema TEXT, table_name TEXT);
是否可以在 Postgres 中创建存储的 dblink 并在不同的查询中使用它?或者我应该创建一些 return dblink 连接参数来封装它们?
我尝试使用外国 table 并执行后续步骤:
创建 postgres_fdw 扩展:
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
创建服务器:
CREATE SERVER my_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '-', port '-', dbname '-');
并为用户 'sys' 创建映射,其中设置远程用户和密码:
CREATE USER MAPPING FOR sys SERVER light_house OPTIONS ( USER 'remote_user', PASSWORD 'remove_password');
GRANT USAGE ON FOREIGN SERVER my_server TO sys;
在架构中创建外部 table:
CREATE FOREIGN TABLE system.my_local_table (
colums ..
) SERVER my_server OPTIONS (schema_name 'remote_user', table_name 'remote_table'
);
GRANT SELECT ON TABLE system.home_measurement TO argus_sys;
之后我捕获了下一个异常:
[2F003] ERROR: password is required
Description: Non-superuser cannot connect if the server does not request a password.
Help: Target server's authentication method must be changed.
你应该使用 foreign table.
要消除错误消息,请更改远程数据库服务器上的 pg_hba.conf
文件以使用 md5
身份验证(不要忘记使用 pg_ctl reload
重新加载)。
我知道在 Oracle 中可以创建存储的 dblink,然后在查询中使用它。例如:
创建 dblink 的脚本:
CREATE PUBLIC DATABASE LINK my_link CONNECT TO my_schema IDENTIFIED BY shema_password USING 'remote';
之后我们可以在查询中使用它:
SELECT * FROM some_table@my_link;
我没有找到适用于 Postgres 的相同解决方案。我不明白我们可以创建命名的 dblink 连接:
为此,我们必须使用 dblink_connect
和名称参数。但是创建的命名 dblink 将在会话关闭后销毁。
或者我们可以为每个查询创建 dblink 连接:
SELECT *
FROM dblink('host= port= dbname= user= password=',
'select table_schema, table_name from information_schema.tables where table_schema = ''data''') AS t1 (table_schema TEXT, table_name TEXT);
是否可以在 Postgres 中创建存储的 dblink 并在不同的查询中使用它?或者我应该创建一些 return dblink 连接参数来封装它们?
我尝试使用外国 table 并执行后续步骤:
创建 postgres_fdw 扩展:
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
创建服务器:
CREATE SERVER my_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '-', port '-', dbname '-');
并为用户 'sys' 创建映射,其中设置远程用户和密码:
CREATE USER MAPPING FOR sys SERVER light_house OPTIONS ( USER 'remote_user', PASSWORD 'remove_password');
GRANT USAGE ON FOREIGN SERVER my_server TO sys;
在架构中创建外部 table:
CREATE FOREIGN TABLE system.my_local_table (
colums ..
) SERVER my_server OPTIONS (schema_name 'remote_user', table_name 'remote_table'
);
GRANT SELECT ON TABLE system.home_measurement TO argus_sys;
之后我捕获了下一个异常:
[2F003] ERROR: password is required
Description: Non-superuser cannot connect if the server does not request a password.
Help: Target server's authentication method must be changed.
你应该使用 foreign table.
要消除错误消息,请更改远程数据库服务器上的 pg_hba.conf
文件以使用 md5
身份验证(不要忘记使用 pg_ctl reload
重新加载)。