【问题标题】:Greenplum 4.3 doesn't support this 'USING' grammarGreenplum 4.3 不支持这种“使用”语法
【发布时间】: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 行

【问题讨论】:

    标签: greenplum postgresql-8.2


    【解决方案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 版本,但支持此功能需要一些时间。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多