0
EXECUTE 'INSERT INTO ' || tablename_2 || ' VALUES (($1).*)' USING NEW ;

Greenplum(基于 Postgres 8.2)不支持这种“使用”语法,如何在 Greenplum 4.3 中执行此运算符

错误信息:

错误:“使用”第 1 行或附近的语法错误:...LECT 'INSERT INTO ' || $1 ||' 值 (($1). )' 使用 $2 ^ 查询:SELECT 'INSERT INTO' || $1 ||' VALUES (($1). )' USING $2 CONTEXT:第 13 行附近的 PL/PgSQL 函数“dp_insert_trigger”中的 SQL 语句

4

2 回答 2

0

Greenplum 中的动态 SQL 需要创建整个 SQL 语句,并且不支持“使用新的”。

v_sql := 'insert into ' || p_target_table_name || ' (col1, col2, col3) ' || 
         'select col1, col2, col3 from ' || p_source_table_name;

execute v_sql;

在 Greenplum 中应该避免使用单例插入语句,因为它非常慢。相反,请执行批量操作。从来没有出现过这种缺乏特性的情况,因为非常不鼓励逐行插入到表中,以至于不需要这个特性。

于 2016-02-02T23:25:58.650 回答
-1

动态命令的USING条款是在 8.4 版中引入的。quote_literal()在 8.2 中,您必须使用字符串连接和,quote_identifier()quote_nullable()函数来组装字符串及其所有动态部分。

自 2011 年 12 月以来,PG 8.2 就不受支持,即使是受人尊敬的 8.4 也已超过其生命周期超过 18 个月。你真的应该升级。

于 2016-02-02T03:20:58.100 回答