我有一个包含数百万行的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