У меня есть две отдельные базы данных на моем сервере.Я хотел бы использовать таблицы из одной базы данных в другой, поэтому я создал внешнюю схему:
CREATE EXTENSION postgres_fdw;
CREATE SERVER core_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'core_db');
CREATE USER MAPPING FOR CURRENT_USER
SERVER core_server
OPTIONS (user 'root', password 'mysupersecretpassword');
CREATE SCHEMA core;
IMPORT FOREIGN SCHEMA public
FROM SERVER core_server
INTO core;
CREATE USER MAPPING FOR root
SERVER core_server
OPTIONS (user 'root', password 'mysupersecretpassword');
GRANT USAGE ON SCHEMA core TO root ;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA core TO root;
Теперь я могу получить доступ к любой таблице главного сервера в моей базе данных.Например, у меня есть таблица «user» на главном сервере, поэтому я могу получить доступ к ее содержимому с помощью следующего кода:
SELECT * from core.user;
Она работает правильно.
Теперь я хотел бысоздать таблицу в базе данных, которая ссылается на столбец в пользовательской таблице (схемы «ядро»).Я пытаюсь добиться этого с помощью следующего предложения:
CREATE TABLE localtablename ( id SERIAL PRIMARY KEY, user_id INT REFERENCES core.user (id) NOT NULL);
Но я получаю следующее сообщение об ошибке:
ERROR: referenced relation "user" is not a table
Я пытался с core.user, "core""пользователь" и другие комбинации, но я всегда получаю эту ошибку.Кто-нибудь знает, что я делаю не так?