У меня есть база данных postgres с миллионами строк, в ней есть столбец с именем geom, который содержит границу свойства.
используя скрипт на python, я извлекаю информацию из этой таблицы и вставляю ее в новую таблицу.
когда я вставляю в новую таблицу скрипт выдает следующее:
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"
В новой таблице есть проверочное ограничение forcece_geotype_geom = ((geometrytype (geom) = 'POLYGON' :: text) OR (geom IS NULL)), в то время как в старой таблице нет, поэтому я предполагаю, что у них нет данных или нет полигонов возможно, данные о мультиполигонах?) в старой таблице. я хочу сохранить новые данные как многоугольник, поэтому не хочу ничего вставлять.
Первоначально я попытался обернуть запрос стандартной обработкой ошибок Python, надеясь, что строки dud geom потерпят неудачу, но скрипт продолжит работу, но скрипт был написан для фиксации в конце не каждой строки, поэтому он не работает.
Я думаю, что мне нужно сделать, это пройтись по строкам старой таблицы geom и проверить, к какому типу геометрии они относятся, чтобы я мог определить, хочу ли я сохранить ее или выбросить, прежде чем вставить в новую таблицу
Какой лучший способ сделать это?