How to connect to localhost with postgres_fdw?
After many attempts probably I found a proper way to connect:
CREATE SERVER app_db
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'test', port '5432', host 'localhost');
Then:
CREATE USER MAPPING for postgres
SERVER app_db
OPTIONS (user 'postgres', password 'postgres');
And then:
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')
But is there a solution to check if it's really "remote" connection? Because servers are on the same localhost and I don't know if I can be sure.
You may connect using Unix Domain Socket instead of TCP connection to gain simpler configuration and better performance (Linux/Unix only, not supported in Windows).
CREATE SERVER app_db
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'test');
Also, you may omit the password if peer
authentication is enabled (default).
CREATE USER MAPPING for postgres
SERVER app_db
OPTIONS (user 'postgres');
Note:
peer
authentication can only be used for postgres
user as the FDW connection is created by the server backend which runs as the system user postgres
.
Also, for security reasons, postgresq_fdw allows peer
authentication only for clients with SUPERUSER
privilege. To allow restricted users to use the FDW, you have to use password
authentication as described in this answer