是否有可能在 SQL 中优雅地实现以下目标:
insert into my_table (the_geom) VALUES
geomfromwkb('\x010100000058b4b610a73a27408144b7147f194840',4326)),
geomfromwkb('\x010100000058b4b610a73a27408144b7147f194840',4326)),
.....
geomfromwkb
这涉及使用两个参数调用外部函数?
到目前为止,我有一个不优雅的解决方案。第一个解决方案是这种类型:
insert into mytable (the_geom) select
geomfromwkb('\x010100000058b4b610a73a27408144b7147f194840',4326)) union
geomfromwkb('\x010100000058b4b610a73a27408144b7147f194840',4326)) union
.....
第二个使用prepare语句:
PREPARE my_insert AS INSERT INTO geom_example (the_geom)
VALUES (geomfromwkb($1,4326));
EXECUTE my_insert ('\x010100000058b4b610a73a27408144b7147f194840');
EXECUTE my_insert ('\x010100000058b4b610a73a27408144b7147f194840');
statement: DEALLOCATE my_insert;
问题一:还有比这更优雅的吗?
问题 2:当数据库看到一堆联合时,它会做什么?
问题 3:prepare 真的比一个 fat insert 快吗?
问题4:字节序列是几何类型。是否可以跳过一致性检查(以确保这确实是几何字节序列)以加快插入速度?
您可以使用该子句构建一个“表”
VALUES
并在其之上构建函数调用:这比重复的函数调用更容易阅读、编写和修改。您甚至可以对齐数据,这有时会使查找错误变得更容易。
一个版本可以将其
VALUES
放入 WITH 查询中。在某些情况下,最好将COPY
数据放入(最好使用命令)临时表并在INSERT
语句中从中进行选择 - 当输入大小变大时,这会很方便。Aparently 我能够毫无问题地调用这样的命令:
这表明一个简单的插入是可能的..我想知道为什么 postgres 曾经对太多的逗号感到困惑..