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 数据库:不支持 Currval()

Greenplum 中的 JPA 异常“不支持 lastval()”

来了,TypeScript 4.3 发布!

Greenplum 实时数据仓库实践——Greenplum安装部署

Greenplum 实时数据仓库实践——Greenplum安装部署