Postgresql INSERT INTO查询的动态表名
我试图弄清楚如何将Postgresql INSERT INTO查询的动态表名,postgresql,function,insert,plpgsql,dynamic-queries,Postgresql,Function,Insert,Plpgsql,Dynamic Queries,我试图弄清楚如何将插入到查询中,并将源的表名和列名作为参数 首先,我只是尝试参数化源表名。我编写了以下查询。现在,我直接声明并分配变量tablename的值,但在实际示例中,它将来自其他源/列表。目标表只有一列 CREATE OR REPLACE FUNCTION foo() RETURNS void AS $$ DECLARE tablename text; BEGIN tablename := 'Table_1'; EXECUTE 'INSERT INTO "Schema
插入到查询中,并将源的表名和列名作为参数
首先,我只是尝试参数化源表名。我编写了以下查询。现在,我直接声明并分配变量tablename
的值,但在实际示例中,它将来自其他源/列表。目标表只有一列
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS
$$
DECLARE
tablename text;
BEGIN
tablename := 'Table_1';
EXECUTE 'INSERT INTO "Schemaname"."targettable"
SELECT "Col_A"
FROM "schemaname".'
||quote_ident(tablename);
END
$$ LANGUAGE PLPGSQL;
尽管查询运行时没有任何错误,但目标表中不会反映任何更改。运行查询时,我得到以下输出
查询正常,0行受影响(执行时间:296毫秒;总时间:296毫秒)
我希望更改反映在目标表中。我不知道如何解决这个问题。已审核的代码
电话:
还有其他方法:
如果您有多个具有相同架构的表,因此它们包含相同的“排序”数据,这通常表示它们应该是一个单独的表,并带有一个附加列,以包含当前可能作为表名的一部分嵌入的数据。也就是说,如果你在为一个组织建模,几乎可以肯定的是,你不应该有男性员工
和女性员工
表格。是否可能“schemaname”。“Table_1”
没有行?什么是输出:SELECT count(“Col_A”)FROM“schemaname”。“Table_1”代码>
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS
$func$
DECLARE
_tbl text := 'Table_1'; -- or 'table_1'?
BEGIN
EXECUTE 'INSERT INTO schemaname.targettable(column_name)
SELECT "Col_A"
FROM schemaname.' || quote_ident(_tbl); -- or "Schemaname"?
END
$func$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION foo(_tbl text)
RETURNS void AS
$func$
BEGIN
EXECUTE 'INSERT INTO schemaname.targettable(column_name)
SELECT "Col_A"
FROM schemaname.' || quote_ident(_tbl);
END
$func$ LANGUAGE plpgsql;
SELECT foo('tablename'); -- tablename is case sensitive