Greenplum 4.3 不支持这种“使用”语法
Posted
技术标签:
【中文标题】Greenplum 4.3 不支持这种“使用”语法【英文标题】:Greenplum 4.3 doesn't support this 'USING' grammar 【发布时间】:2016-02-02 02:14:44 【问题描述】:EXECUTE 'INSERT INTO ' || tablename_2 || ' VALUES (($1).*)' USING NEW ;
Greenplum(基于 Postgres 8.2)不支持这种“使用”语法,如何在 Greenplum 4.3 中执行此运算符
错误信息:
错误:“USING”第 1 行或附近的语法错误:...LECT 'INSERT INTO ' || $1 ||'价值 (($1).)' 使用 $2 ^ 查询:选择“插入”|| $1 ||'价值 (($1).)' USING $2 上下文:PL/PgSQL 函数“dp_insert_trigger”附近的 SQL 语句 第 13 行
【问题讨论】:
【参考方案1】: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 中应该避免使用单例插入语句,因为它非常慢。相反,请执行批量操作。从来没有出现过这种缺少功能的情况,因为非常不鼓励逐行插入表格,因此不需要此功能。
【讨论】:
【参考方案2】:8.4 版中引入了动态命令的USING
子句。在 8.2 中,您必须使用字符串连接和 quote_literal()
、quote_identifier()
和 quote_nullable()
函数来组装字符串及其所有动态部分。
PG 8.2 is unsupported since December 2011 甚至是可敬的 8.4 已经超过了 18 个月的生命周期。你真的应该升级了。
【讨论】:
谢谢,但我用的是 greenplum 4.3.5.x。它的 pg 是 8.2,我没办法。你能输入关于我的sql的完整语句吗?我很穷。谢谢你。 他没有使用 PostgreSQL。 Greenplum 是 PostgreSQL 8.2 的一个分支。 @JonRoberts:当我回答时,问题中没有提到 Greenplum,PostgreSQl 8.2 是。仅 3 小时后,他的评论中提到了 GP,然后 a_horse_with_no_name 编辑了这个问题。因此,如果您投了反对票,您可能需要重新考虑。 Greenplum(内部显示 PG 版本 8.2)和 PostgreSQL 版本 8.2 是两个不同的产品。目前 Pivotal 合并了较新的 PostgreSQL 版本,但支持此功能需要一些时间。以上是关于Greenplum 4.3 不支持这种“使用”语法的主要内容,如果未能解决你的问题,请参考以下文章
“不支持这种电影格式” - iPad 上 UIImagePickerController 的奇怪问题(iOS v 4.3)
Greenplum 中的 JPA 异常“不支持 lastval()”