我有一個包含數百萬行的postgres數據庫,它有一個名爲geom的列,其中包含屬性的邊界。Postgis - 我如何在插入之前檢查幾何類型
使用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"
新表中有一個檢查約束enforce_geotype_geom =((geometrytype(GEOM)= '多邊形' ::文)OR (geom IS NULL)),而舊錶不會,所以即時猜測舊錶中的數據或非多邊形(可能是多邊形數據?)。我想保留新的數據作爲多邊形,所以不想插入其他任何東西。
最初我試圖用標準的python錯誤處理來包裝查詢,希望dud geom行會失敗,但腳本會繼續運行,但腳本已經寫在最後不提交,因此它不起作用。
我想我需要做的是遍歷舊錶格幾何行,並檢查它們是什麼類型的幾何,所以我可以確定是否要保留它或丟棄之前,我插入到新表
這是怎麼回事呢?
謝謝,本來會解決混合蟒蛇/ postgres的答案,但這是令人驚訝的是能夠做到這一切在postgres裏面。感謝您的回答 – ADAM 2010-01-08 00:26:28