Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何使用postgres\u fdw连接到本地主机?_Database_Postgresql_Postgresql 9.3_Pgadmin_Foreign Data Wrapper - Fatal编程技术网

Database 如何使用postgres\u fdw连接到本地主机?

Database 如何使用postgres\u fdw连接到本地主机?,database,postgresql,postgresql-9.3,pgadmin,foreign-data-wrapper,Database,Postgresql,Postgresql 9.3,Pgadmin,Foreign Data Wrapper,我的想法是,我有一个名为northwind的本地数据库,通过postgres_fdw我想在本地主机上连接另一个名为test的数据库(远程连接模拟,在数据库中的表更新时,在其他数据库中执行一些操作,如保存到历史记录等)。因此,我打开了psql控制台并键入: CREATE SERVER app_db FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'test', host 'localhost:5432'); 正如我在link中发现的那样。接

我的想法是,我有一个名为
northwind
的本地数据库,通过
postgres_fdw
我想在本地主机上连接另一个名为
test
的数据库(远程连接模拟,在数据库中的表更新时,在其他数据库中执行一些操作,如保存到历史记录等)。因此,我打开了psql控制台并键入:

CREATE SERVER app_db 
FOREIGN DATA WRAPPER postgres_fdw 
OPTIONS (dbname 'test', host 'localhost:5432');
正如我在link中发现的那样。接下来,我还要学习教程:

CREATE USER MAPPING for postgres
SERVER app_db 
OPTIONS (user 'postgres', password 'postgres');
(我假设用户和密码应该与我在Hibernate中访问数据库时使用的相同,并且在我的情况下,教程中的当前用户是
postgres
,因为这是我的PgAdmin III中唯一存在的角色)。 然后我创建了外部表:

CREATE FOREIGN TABLE groups
(
  id serial NOT NULL,
  name character varying(255) NOT NULL,
  version integer DEFAULT 0
)
 SERVER app_db OPTIONS (table_name 'groups')
这没关系,我可以在PgAdmin III的
schema/foreign表中找到它。但是当我尝试
SELECT*FROM groups
时,我得到了:

********** ERROR**********

ERROR: could not connect to server "app_db"
SQL State: 08001
是否可能是因为我
创建服务器app_db..
时没有使用本地主机服务器名?我不能这样做,因为它的名称带有空格(PostgreSQL 9.3),并且在创建时会导致一些奇怪的问题。先谢谢你。
更新:即使我在本地主机上创建了另一个名为“app\u db”的服务器,它也无法工作。

经过多次尝试,我可能找到了正确的连接方式:

CREATE SERVER app_db 
FOREIGN DATA WRAPPER postgres_fdw 
OPTIONS (dbname 'test', port '5432', host 'localhost');
然后:

然后:

CREATE FOREIGN TABLE groups
(
  id serial NOT NULL,
  name character varying(255) NOT NULL,
  version integer DEFAULT 0
)
 SERVER app_db OPTIONS (schema_name 'public', table_name 'groups')

但是,有没有解决方案来检查它是否真的是“远程”连接?因为服务器位于同一本地主机上,我不知道是否可以确定。

您可以使用Unix域套接字而不是TCP连接进行连接,以获得更简单的配置和更好的性能(仅限Linux/Unix,Windows不支持)

此外,如果启用了
对等身份验证(默认),则可以省略密码

注:
peer
身份验证只能用于
postgres
用户,因为FDW连接是由作为系统用户
postgres
运行的服务器后端创建的


此外,出于安全原因,postgresq_fdw仅允许具有
超级用户
权限的客户端进行
对等
身份验证。要允许受限用户使用FDW,您必须按照

中的说明使用
密码
身份验证,很抱歉在这里询问,但我会一步一步地按照您的建议进行操作,当我执行select
错误:无法连接到服务器“omnes_db”时会出现此错误详细信息:无法连接到服务器:连接被拒绝服务器是否在主机“localhost”(::1)上运行并在端口5431上接受TCP/IP连接?无法连接到服务器:连接被拒绝是在主机“localhost”(127.0.0.1)上运行的服务器在端口5431上接受TCP/IP连接?
pg_hba.cong
postgresql.conf
文件设置正确,允许删除安全连接。真的不知道更新什么:上面的答案非常适合我的情况。要访问位于同一postgres实例中的另一个数据库,可以输入服务器的主机和端口以及用户映射的密码。您可能必须通过至少授予“选择”权限来允许访问外部表。
CREATE FOREIGN TABLE groups
(
  id serial NOT NULL,
  name character varying(255) NOT NULL,
  version integer DEFAULT 0
)
 SERVER app_db OPTIONS (schema_name 'public', table_name 'groups')
CREATE SERVER app_db
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'test');
CREATE USER MAPPING for postgres
SERVER app_db 
OPTIONS (user 'postgres');