2016-02-02 2 views
0
EXECUTE 'INSERT INTO ' || tablename_2 || ' VALUES (($1).*)' USING NEW ; 

Greenplum (на основе Postgres 8.2) не поддерживает это 'с помощью' грамматики, как сделать этот оператор в Greenplum 4.3Greenplum 4,3 не поддерживает эту 'USING' грамматики

Информация об ошибке:

ERROR: syntax error at or near "USING" LINE 1: ...LECT 'INSERT INTO ' || $1 ||' VALUES (($1).)' USING $2 ^QUERY: SELECT 'INSERT INTO ' || $1 ||' VALUES (($1).)' USING $2 CONTEXT: SQL statement in PL/PgSQL function "dp_insert_trigger" near line 13

ответ

-1

Предложение о динамических командах USING было введено в версии 8.4. В 8.2 вам необходимо собрать строку со всеми ее динамическими частями, используя конкатенацию строк и функции quote_literal(), quote_identifier() и quote_nullable().

PG 8.2 is unsupported since December 2011 и даже уважаемый 8.4 находится вне его жизни более 18 месяцев. Вы действительно должны обновиться.

+0

спасибо, но я использую greenplum 4.3.5.x.its pg is 8.2, у меня нет пути. и могли бы вы набрать полное заявление о моем sql? Я беден в pg.thank u. – user5107182

+0

Он не использует PostgreSQL. Greenplum - это вилка PostgreSQL 8.2. –

+0

@JonRoberts: Greenplum не упоминался в вопросе, когда я ответил на него, PostgreSQl 8.2 был. Ссылка на GP появилась только через 3 часа в его комментарии, а затем a_horse_with_no_name отредактировал вопрос. Поэтому, если вы сделали голосование, вы можете пересмотреть это. – Patrick

0

Динамический SQL в Greenplum требует создания всей инструкции 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 следует избегать высказываний сложения Singleton, поскольку он очень медленный. Вместо этого выполняйте массовые операции. Это отсутствие функции никогда не возникало, потому что вставка в таблицу по строкам настолько сильно обескуражена, что эта функция не нужна.