|
Продолжить транзакцию после ошибки INSERT
|
|||
---|---|---|---|
#18+
Делаю импорт большого файла, иногда в столбце с integer присутствует текст непотребный, что приводит к ошибке вставки данных. Раньше делал так (через php - pgPDO) обрабатываю построчно, вставляю, ловлю в try catch ошибку, пишу ее в лог, продолжаю обработку дальше. Но на очень больших файлах это к очень долгому импорту. Отсюда решение - вставку делаю в тарнзакции: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Применение транзакции ускорило ипорт примерно в 100 раз, так что отказываться от транзакции уже не хочу, но вот беда catch сбрасывает транзакцию и на следующем шаге после ошибки я получаю исключение: "ОШИБКА: текущая транзакция прервана, команды до конца блока транзакции игнорируются" Вопрос: есть ли флаги какие у PDO или способ организации запроса какой хитрый, чтобы пропустить плохую строку, транзакцию не прерывать и работать дальше. Почему не пишу свой валидатор? Полей много, времени мало, все файлы разные, пользователь сам мапирует столбцы - а валидатор сервера - он же вполне себе хорош, и сообщения на двух языках, и коды, все уже при нем... только вот транзакция рвется. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2019, 13:02 |
|
Продолжить транзакцию после ошибки INSERT
|
|||
---|---|---|---|
#18+
deadline буду писать валидотор :) PS погуглил - в MSSQL есть что то типа save-точек. Транзакцию можно откатить не к началу, а к этой точке... но это другая БД ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2019, 15:49 |
|
Продолжить транзакцию после ошибки INSERT
|
|||
---|---|---|---|
#18+
prustrdeadline буду писать валидотор :) PS погуглил - в MSSQL есть что то типа save-точек. Транзакцию можно откатить не к началу, а к этой точке... но это другая БД https://postgrespro.ru/docs/postgresql/11/sql-savepoint ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2019, 16:07 |
|
|
start [/forum/topic.php?fid=53&fpage=42&tid=1995262]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 274ms |
total: | 411ms |
0 / 0 |