编辑:我已经解决了问题。破坏者,它与PSQL或FDW无关。这是一个DNS问题,因为我正在不配置使用内部DNS服务器的Docker机器中运行本地DB。
我正在尝试在数据库中创建一个外国表(从另一个Postgres数据库)。但是,当我运行SELECT语句时,外国数据包装器说它无法翻译提供的主机名:
ERROR: could not connect to server "pgs3"
DETAIL: could not translate host name "db7.ap.int.unavco.org" to address: Name or service not known
那么,我的主机名怎么了?我可以使用psql -U myuser -W -h db7.ap.int.unavco.org -d pgs3
连接到PGS3数据库。我用于创建外国表的脚本真的很简单,并且在此处的文档上进行了建模。
-- Drop everything if the fdw exists already
DROP EXTENSION IF EXISTS postgres_fdw CASCADE;
-- Add the postgres_fwd extension
CREATE EXTENSION postgres_fdw WITH SCHEMA public;
-- Create foreign server object
CREATE SERVER pgs3 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'db7.ap.int.unavco.org', dbname 'pgs3', port '5432');
-- Create user mapping object to authenticate
CREATE USER MAPPING FOR postgres SERVER pgs3 OPTIONS (user 'afakeuser', password 'afakepassword');
-- Create the foreign table, ensuring the types and NOT NULL rules match the target table
-- The target table only has two columns to keep things simple
CREATE FOREIGN TABLE analysis_type (
type_id smallint,
type varchar NOT NULL
)
SERVER pgs3;
-- Try a select
SELECT
*
FROM
analysis_type;
-- Get an error...
作为最近遇到这个问题的人,这就是我发现的。这是一个DNS问题,因为我能够将RAW服务器IP地址放置,并且该连接毫无失败。我能够从我的应用程序服务器中ping域,但是创建连接仍然会失败。
我的原因是因为我们有单独的应用程序和数据库服务器。我们的数据库服务器还需要能够解析我指定的域。一旦我在数据库服务器上映射/etc/hosts并重新启动数据库服务后,我就可以将域用作主机,并且连接工作。