ON CONFLICT DO UPDATE/DOTHING не работает с FOREIGN TABLE

Функция В КОНФЛИКТЕ ОБНОВЛЯТЬ/НЕ ДЕЛАТЬ НИЧЕГО появится в PostgreSQL 9.5. Создание Server и FOREIGN TABLE появится в версии PostgreSQL 9.2.

Когда я использую ON CONFLICT DO UPDATE для FOREIGN table, он не работает, но когда я запускаю тот же запрос для обычной таблицы, он работает. Запрос приведен ниже. .

// Для обычной таблицы

INSERT INTO app
 (app_id,app_name,app_date)
 SELECT
p.app_id,
p.app_name,
p.app_date  FROM app p
WHERE p.app_id=2422
ON CONFLICT (app_id) DO 
UPDATE SET app_date = excluded.app_date ;

O/P : запрос возвращен успешно: затронута одна строка, время выполнения 5 мс.

// Для концепции внешней таблицы

// foreign_app — внешняя таблица, а app — обычная таблица

INSERT INTO foreign_app
 (app_id,app_name,app_date)
 SELECT
p.app_id,
p.app_name,
p.app_date  FROM app p
WHERE p.app_id=2422
ON CONFLICT (app_id) DO 
UPDATE SET app_date = excluded.app_date ;

O/P: ОШИБКА: нет ограничения уникальности или исключения, соответствующего спецификации ON CONFLICT

Кто-нибудь может объяснить, почему это происходит?


person P S M    schedule 22.11.2016    source источник


Ответы (1)


На сторонние таблицы ограничений нет, поскольку PostgreSQL не может обеспечить целостность данных на внешнем сервере, что обеспечивается ограничениями, определенными на внешнем сервере.

Чтобы достичь того, что вы хотите сделать, вам придется придерживаться традиционного способа сделать это (например, этот пример кода).

person Laurenz Albe    schedule 22.11.2016