Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
02.04.2019, 13:02
|
|||
---|---|---|---|
Продолжить транзакцию после ошибки 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, 15:49
|
|||
---|---|---|---|
Продолжить транзакцию после ошибки INSERT |
|||
#18+
deadline буду писать валидотор :) PS погуглил - в MSSQL есть что то типа save-точек. Транзакцию можно откатить не к началу, а к этой точке... но это другая БД ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.04.2019, 16:07
|
|||
---|---|---|---|
Продолжить транзакцию после ошибки INSERT |
|||
#18+
prustrdeadline буду писать валидотор :) PS погуглил - в MSSQL есть что то типа save-точек. Транзакцию можно откатить не к началу, а к этой точке... но это другая БД https://postgrespro.ru/docs/postgresql/11/sql-savepoint ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1995262]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 410ms |
0 / 0 |