tengo una base de datos postgres con millones de filas en ella tiene una columna llamada geom que contiene el límite de una propiedad.Postgis - Cómo verifico el tipo de geometría antes de hacer una inserción
usando una secuencia de comandos python Estoy extrayendo la información de esta tabla y volviéndola a insertar en una nueva tabla.
cuando inserto en la nueva tabla de los errores de script con el siguiente:
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"
La nueva tabla tiene una restricción de comprobación enforce_geotype_geom = ((GeometryType (geom) = 'POLÍGONO' :: texto) o (geom IS NULL)) mientras que la tabla anterior no, así que supongo que hay datos falsos o no polígono (¿quizás datos multipolígonos?) en la tabla anterior. Quiero mantener los nuevos datos como un polígono, así que no quiero insertar nada más.
Inicialmente traté de envolver la consulta con el manejo de errores de python estándar con la esperanza de que las filas fuddrom fallarían pero la secuencia de comandos seguiría ejecutándose, pero la secuencia de comandos se escribió para comprometer al final no cada fila por lo que no funciona .
Creo que lo que tengo que hacer es recorrer las filas de geom de la tabla anterior y comprobar qué tipo de geometría son para poder establecer si quiero conservarlo o tirarlo antes de insertarlo en la nueva tabla
¿Cuál es la mejor manera de solucionar esto?
gracias, me habría conformado con una respuesta híbrida python/postgres pero es increíble poder hacerlo todo dentro de postgres. gracias por tu respuesta – ADAM