Вставки внешних таблиц не используют удаленную последовательность - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть набор приложений, обращающихся к двум различным базам данных PostgreSQL 9.6 на одном сервере.Из-за некоторых ограничений приложения одно приложение обращается к нескольким таблицам через FDW в одной БД к другой.

Примерно так:
DB1.fdw_table_a -> DB2.table_a

fdw_table_a используется только для вставки данных журнала.Эта таблица имеет столбец id, который представляет собой последовательность bigint.Последовательность существует в DB1 (во внешней таблице) и в DB2 (в «реальной» таблице).Это работает так, как должно, и все хорошо.

Теперь необходимо, чтобы другое приложение (опять же с ограниченными возможностями доступа) выполняло вставки в «настоящую» таблицу, DB2.table_a.При тестировании я вижу некоторые несоответствия в столбце id, но никаких очевидных проблем не выявлено.

В средах, ориентированных на пользователя, я вижу, что последовательность DBD FDW используется должным образом, но при вставкахначинайте непосредственно с таблицы DB2 'real', эта последовательность будет начинаться с 1 (поскольку она никогда не использовалась).

Есть ли другие вопросы, которые мы должны рассмотреть в этой среде?Есть ли некоторые проблемы, которые могут возникнуть из-за совпадения этих двух последовательностей, вставляемых в таблицу?

1 Ответ

0 голосов
/ 18 ноября 2018

Последовательность используется только в том случае, если в операторе INSERT пропущен столбец id.Но postgres_fdw никогда не пропустит столбец, как вы можете видеть из плана выполнения.

Один из способов решения этой проблемы - использовать стороннюю таблицу, в которой не содержит столбец id,Затем любая вставка в эту внешнюю таблицу будет использовать последовательность для заполнения этого столбца.

...