У меня есть база данных postgres с миллионами строк, в ней есть столбец с именем geom, который содержит границу свойства.Postgis - Как проверить тип геометрии перед вставкой
using python script Я извлекаю информацию из этой таблицы и снова вставляю ее в новую таблицу.
, когда я вставить в новую таблицу ошибок сценариев с следующее:
Traceback (most recent call last):
File "build_parcels.py", line 258, in <module>
main()
File "build_parcels.py", line 166, in main
update_cursor.executemany("insert into parcels (par_id, street_add, title_no, proprietors, au_name, ua_name, geom) VALUES (%s, %s, %s, %s, %s, %s, %s)", inserts)
psycopg2.IntegrityError: new row for relation "parcels" violates check constraint "enforce_geotype_geom"
Новая таблица имеет проверочное ограничение enforce_geotype_geom = ((geometrytype (геом) = «ПОЛИГОН» :: текст) ИЛИ (geom IS NULL)), тогда как в старой таблице нет, поэтому я предполагаю данные dud data или non polygon (возможно, данные multipolygon?) в старой таблице. Я хочу сохранить новые данные в виде многоугольника, поэтому не хочу вставлять что-либо еще.
Первоначально я попробовал обернуть запрос с помощью стандартной обработки ошибок python, надеясь, что строки dud geom потерпят неудачу, но скрипт будет работать, но скрипт был написан для фиксации в конце не каждой строки, поэтому он не работает ,
Я думаю, что мне нужно сделать, это перебрать старые строки геометрии таблицы и проверить, какой тип геометрии они есть, поэтому я могу установить, хочу ли я ее сохранить или выбросить, прежде чем вставлять в новую таблицу
Каков наилучший способ обойти это?
спасибо, согласился бы на гибридный ответ python/postgres, но это удивительно, чтобы иметь возможность делать все это внутри postgres. спасибо за Ваш ответ – ADAM