tôi có một cơ sở dữ liệu postgres với hàng triệu hàng trong nó, nó có một cột gọi là geom chứa đường biên của một thuộc tính.Postgis - Làm thế nào để tôi kiểm tra kiểu hình học trước khi tôi chèn
sử dụng tập lệnh python i am trích xuất thông tin từ bảng này và chèn lại nó vào bảng mới.
khi tôi chèn trong bảng mới các lỗi kịch bản ra như sau:
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"
Bảng mới có một ràng buộc kiểm tra enforce_geotype_geom = ((GeometryType (Geom) = 'Polygon' :: text) HOẶC (geom IS NULL)) trong khi bảng cũ không, do đó, im đoán theres dud dữ liệu hoặc đa giác không (có lẽ multipolygon dữ liệu?) Trong bảng cũ. tôi muốn giữ dữ liệu mới dưới dạng đa giác để không chèn bất kỳ thứ gì khác.
Ban đầu tôi đã thử gói truy vấn với xử lý lỗi python chuẩn với hy vọng rằng các hàng geom dud sẽ không thành công nhưng tập lệnh sẽ tiếp tục chạy, nhưng tập lệnh đã được ghi để cam kết ở cuối không phải mỗi hàng sao cho nó không hoạt động . Tôi nghĩ rằng những gì tôi cần làm là lặp qua các hàng geom bảng cũ và kiểm tra loại hình họ là gì để tôi có thể thiết lập có hay không tôi muốn giữ nó hoặc vứt nó đi trước khi tôi chèn vào bảng mới
Làm cách nào tốt nhất để thực hiện việc này?
cảm ơn, sẽ có giải quyết cho một câu trả lời python/postgres lai, nhưng điều này là tuyệt vời để có thể làm điều đó tất cả bên trong postgres. cảm ơn câu trả lời của bạn – ADAM