Я делаю объемные вставки 10000 записей в Postgres:PostgreSQL эквивалент MySQL --force флаг
INSERT INTO TABLE VALUES (v1),...,(v10000)
Я делаю это с помощью библиотеки Python psycopg2. В настоящее время, если один из кортежей, скажем, 5000 бомб (например, если поле имеет неправильный тип), вся моя вставка пакета не работает, потому что генерируется исключение. Я ищу эквивалент флага MySQLsforfor, который решает именно эту проблему; который говорит MySQL, чтобы продолжать идти на какие-либо ошибки (http://dev.mysql.com/doc/refman/5.0/en/mysql-command-options.html#option_mysql_force)
Я не вижу здесь ничего, и это для еще более новой ПГ, который является весьма тревожным: http://www.postgresql.org/docs/9.3/static/sql-select.html
На что он бомбит? –
Например, значение X слишком велико для «smallint». Я просто хочу не вставлять все строки, которые нарушают некоторую ошибку вставки данных и продолжают идти. Поскольку я до сих пор не знаю всех возможных ошибок данных, я бы скорее не реализовал эту логику, чтобы проверять кортежи, прежде чем пытаться вставить ... какой кошмар был бы. – Tommy
Я не думаю, что это возможно. Обработка транзакций Postgres более строгая, чем MySQL. Postgres не поддерживает транзакции, в которых могут выполняться только некоторые из операторов, поскольку это нарушает «атомную» концепцию транзакции. Единственный способ сделать это можно с помощью отдельных вставок с точками сохранения для каждой вставки. Но это будет очень медленно. –