Функция В КОНФЛИКТЕ ОБНОВЛЯТЬ/НЕ ДЕЛАТЬ НИЧЕГО появится в 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
Кто-нибудь может объяснить, почему это происходит?