スキーマ「apm」に接続しています
関数を実行しようとすると、以下のエラーが発生します:
ERROR: user mapping not found for "postgres"
データベース接続情報は言う:postgres @ PostgreSQL 9.6のapm
psqlバージョン:PostgreSQL 9.6.3、Visual C++ビルド1800、64ビットでコンパイル
このエラーに対処するにはどうすればよいですか。ありがとう。
これは、外部テーブルを使用しようとしていて、ロール(この場合はpostgres
)にリモートサーバーのユーザーとパスワードが定義されていないことを意味します。
これを追加するには、次のクエリを実行します。
CREATE USER MAPPING
FOR postgres
SERVER remote_server_name
OPTIONS (user 'bob', password 'secret');
あなたはそのようなテーブルのサーバー名を得ることができます:
SELECT srvname
FROM pg_foreign_table t
JOIN pg_foreign_server s ON s.oid = t.ftserver
WHERE ftrelid = 'schemaname.tablename'::regclass
https://www.postgresql.org/docs/current/static/sql-createusermapping.html
CREATE USER MAPPING —外部サーバーへのユーザーの新しいマッピングを定義します
関数は、ユーザーマッピングが必要なサーバーを使用して外部テーブルをクエリします。どうやら、それはあなたのためではなく、ユーザー所有者のために存在しています。または、ユーザーマッピングが作成されているユーザーで関数を実行します。
あなたはそれらを見ることができます:
SELECT um.*,rolname
FROM pg_user_mapping um
JOIN pg_roles r ON r.oid = umuser
JOIN pg_foreign_server fs ON fs.oid = umserver;
すべてのユーザーのユーザーマッピングを作成する場合は、次のようにします。
CREATE USER MAPPING
FOR PUBLIC
SERVER remote_server_name
OPTIONS (user 'bob', password 'secret');