Я пытаюсь вставить в таблицу в базе данных Postgres из двух других баз данных Postgres, используя оболочки внешних данных. Цель состоит в том, чтобы иметь автоматически сгенерированный первичный ключ, независимый от источника, так как их будет более двух.
Сначала я определил таблицы так:
Целевая база данных:
create table dummy (
dummy_pk bigserial primary key
-- other fields
);
Источники базы данных:
create foreign table dummy (
dummy_pk bigserial
-- other fields
) server ... ;
Это решение работало нормально, пока я вставлял только из одного источника, когда я пытался вставить из другого, без указания dummy_pk, я получил это сообщение:
Повторяющийся ключ (dummy_pk) = (1)
Поскольку postgres пытается вставить идентификатор 1, я считаю, что последовательность, используемая для каждой исходной внешней таблицы, отличается. Я немного изменил исходные таблицы, чтобы позволить последовательности целевой таблицы выполнять работу для идентификатора:
create foreign table dummy (
dummy_pk bigint
-- other fields
) server ... ;
На этот раз у меня другая ошибка:
Значение NULL нарушает константу NOT NULL в столбце «dummy_pk».
Поэтому я считаю, что исходный сервер отправляет запрос к цели, где dummy_pk имеет значение null, а цель не заменяет его значением по умолчанию.
Итак, есть ли способ заставить использовать целевую последовательность в запросе, выполняемом в источнике? Может мне нужно поделиться этой последовательностью, можно ли создать чужую последовательность? Я не могу удалить столбец в сторонних таблицах, так как мне нужен доступ для чтения к ним.
Спасибо!