使用 postgreSQL 从多个服务器查询表
Query tables from multiple servers with postgreSQL
我在不同的 PostgreSQL 服务器上有几个数据库,其中的表具有相同的列
(installs_1、installs_2 和 installs_3)
installs(country varchar, date datetime,paid boolean, installs int)
我想编写一个用户可以用来同时查询所有这些数据库的函数,我该怎么做?
我的查询是:select country,count(*) from t1,t2
提供此功能的 PostgreSQL 扩展是 postgres_fdw
。以下是如何设置的示例:
首先创建扩展:
CREATE EXTENSION postgres_fdw
之后创建指向外部 postgres 服务器的服务器
CREATE SERVER remote_postgres
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'mydb', host 'remoteserver', port '5432');
然后是用户映射,让你当前数据库中的用户可以访问国外数据库:
CREATE USER MAPPING FOR local_user
SERVER remote_postgres
OPTIONS (user 'foreign_user', password 'secret');
最后你创建了一个外国 table 到 link 两个 tables
CREATE FOREIGN TABLE foreign_table_test
(id INT, description TEXT)
SERVER remote_postgres
OPTIONS (schema_name 'public', table_name 'table_test');
创建 table 后,您可以像查询 normal/local table:
一样查询它
SELECT * FROM foreign_table_test
延伸阅读:
- 一个
closer look
变成postgres_fdw
- postgres_fdw
documentation examples
我在不同的 PostgreSQL 服务器上有几个数据库,其中的表具有相同的列
(installs_1、installs_2 和 installs_3)
installs(country varchar, date datetime,paid boolean, installs int)
我想编写一个用户可以用来同时查询所有这些数据库的函数,我该怎么做?
我的查询是:select country,count(*) from t1,t2
提供此功能的 PostgreSQL 扩展是 postgres_fdw
。以下是如何设置的示例:
首先创建扩展:
CREATE EXTENSION postgres_fdw
之后创建指向外部 postgres 服务器的服务器
CREATE SERVER remote_postgres
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'mydb', host 'remoteserver', port '5432');
然后是用户映射,让你当前数据库中的用户可以访问国外数据库:
CREATE USER MAPPING FOR local_user
SERVER remote_postgres
OPTIONS (user 'foreign_user', password 'secret');
最后你创建了一个外国 table 到 link 两个 tables
CREATE FOREIGN TABLE foreign_table_test
(id INT, description TEXT)
SERVER remote_postgres
OPTIONS (schema_name 'public', table_name 'table_test');
创建 table 后,您可以像查询 normal/local table:
一样查询它SELECT * FROM foreign_table_test
延伸阅读:
- 一个
closer look
变成postgres_fdw - postgres_fdw
documentation examples