我有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对做一个功能吗?怎么做到这个?
答案 0 :(得分:0)
是的,你可以。使用PL / PgSQL EXECUTE ... USING
语句动态构造SQL字符串并执行它。这会慢很多,因为PL / PgSQL调用开销和每次重新声明语句的成本。
更重要的是,您似乎正在尝试编写upsert / merge函数。这个功能错了。为什么,请参阅depesz's excellent-as-usual article on upsert/merge。