PostgreSQL中的函数

时间:2012-10-09 06:43:21

标签: postgresql postgresql-8.4

我有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对做一个功能吗?怎么做到这个?

1 个答案:

答案 0 :(得分:0)

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

更重要的是,您似乎正在尝试编写upsert / merge函数。这个功能错了。为什么,请参阅depesz's excellent-as-usual article on upsert/merge