Postgres Вставить как выбрать из таблицы игнорировать любые ошибки - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь выполнить массовую загрузку записей из временной таблицы в таблицу, используя вставку при выборе stmt и при обновлении стратегии конфликта.

Я хочу загрузить как можно больше записей, в настоящее время, если есть какие-либо нарушения внешнего ключа, никакие записи не вставляются, все откатывается.Есть ли способ вставить действительные записи и пропустить ошибочные записи.

В https://dba.stackexchange.com/a/46477 Я видел стратегию перехода с внешней таблицы в запросе, чтобы игнорировать ошибочные строки.Я тоже не хочу этого делать, поскольку у меня может быть много внешних ключей в этой таблице, и это сделает мой запрос более сложным и специфичным для таблицы.Я хотел бы, чтобы он был универсальным.

Пример использования, если в временной таблице 100 строк и предполагается, что строки с номерами 5 и 7 вызывают ошибку вставки, я хочу вставить остальные 98 записей и определить, какие двестроки не удалось.Я хочу избегать вставки записи по записи и ловить ошибку, так как это неэффективно.Я делаю все это упражнение, чтобы избежать загрузки таблицы строка за строкой.

Oracle предоставляет поддержку для перехвата массовых ошибок при выстреле.
Пример https://stackoverflow.com/a/36430893/8575780 https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1422998100346727312

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

Я смотрю что-то ближе к тому, что делает pgloader, когда сталкиваетсяошибка.https://pgloader.readthedocs.io/en/latest/pgloader.html#batches-and-retry-behaviour

...