0

我有 PostgreSQL 8.4 和 3 对这样的表:

CREATE TABLE filedata_temp
(
 num serial NOT NULL,
 id integer,
 mydata character(25),
 the_geom geometry,
 CONSTRAINT filedata_temp_pkey PRIMARY KEY (num)
)

CREATE TABLE filedata
(
 num serial NOT NULL,
 id integer,
 mydata character(25),
 the_geom geometry,
 CONSTRAINT filedata_pkey PRIMARY KEY (num)
)

和3个这样的功能:

-- Function: insert_into_wgs()

-- DROP FUNCTION insert_into_wgs();

CREATE OR REPLACE FUNCTION insert_into_wgs()
RETURNS void AS
$BODY$
BEGIN
INSERT INTO filedata (num,id,mydata,the_geom)  
SELECT num,id,mydata,ST_TRANSFORM(the_geom,4326)
FROM filedata_temp
WHERE id NOT IN (SELECT id FROM filedata);
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION insert_into_wgs() OWNER TO postgres;
);

所以我有 3 对表的 3 个模拟函数。这样不好。那么我可以为所有 3 对创建一个函数吗?这个怎么做?

4

1 回答 1

0

是的你可以。使用 PL/PgSQLEXECUTE ... USING语句动态构造 SQL 字符串并执行它。不过这会慢很多,因为有 PL/PgSQL 调用开销和每次重新计划语句的成本。

更重要的是,您似乎正在尝试编写 upsert / merge 函数。这个函数是错误的。有关原因,请参阅depesz 关于 upsert/merge 的优秀文章

于 2012-10-09T09:25:19.473 回答