编辑:我已经解决了这个问题。剧透一下,这与psql或fdw没有任何关系。它是一个DNS问题,因为我在运行本地数据库的docker机器上没有配置我们内部的DNS服务器。
我正在尝试在我的数据库中创建一个外部表(从另一个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...
psql -U myuser -W -h db7.ap.int.unavco.org -d pgs3
?客户端可能只需使用/etc/hosts
等等... - Vao Tsundocker exec
命令。 - medley56