J'ai une base de données postgres avec des millions de lignes, il a une colonne appelée geom qui contient la limite d'une propriété. En utilisant un script python, je suis en train d'extraire les informations de cette table et de les réinsérer dans une nouvelle table.Postgis - Comment puis-je vérifier le type de géométrie avant de faire un insert
lors de l'insertion dans la nouvelle table les bugs de script avec les éléments suivants:
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 nouvelle table a une contrainte de vérification enforce_geotype_geom = ((GeometryType (geom) = 'POLYGONE' :: text) OU (geom IS NULL)) alors que l'ancienne table ne le fait pas, donc je devine qu'il y a des données non converties ou des données non polygonales (peut-être des données multipolygones?) dans l'ancienne table. Je veux garder les nouvelles données sous forme de polygone, donc je ne veux rien ajouter d'autre. Initialement, j'ai essayé d'encapsuler la requête avec la gestion des erreurs python standard avec l'espoir que les lignes de geom ratées échoueraient mais le script continuerait à fonctionner, mais le script a été écrit pour valider à la fin de chaque ligne donc ça ne marche pas .
Je pense que ce que je dois faire est de parcourir les anciennes lignes de la table geom et vérifier quel type de géométrie elles sont afin que je puisse établir si je veux le garder ou le jeter avant de l'insérer dans la nouvelle table
Quelle est la meilleure façon de procéder?
grâce, aurait réglé pour un python hybride/postgres réponse, mais c'est incroyable de pouvoir le faire tous postgres à l'intérieur. Merci pour votre réponse – ADAM