2016-08-29 6 views
0

Является ли использование формата() в таких случаях, как это, как правило, взаимозаменяемым?Использование Postgres формата()

exec_str := format('UPDATE ' || TG_ARGV[0] || 
        ' SET username = current_user, 
           time = current_timestamp::timestamp(0);' 
       ); 
EXECUTE exec_str; 

против

exec_str := 'UPDATE ' || TG_ARGV[0] || 
        ' SET username = current_user, 
           time = current_timestamp::timestamp(0);' 
        ; 
EXECUTE format(exec_str); 
+0

Вы пробовали каждый? –

+0

да, обе произведение. Я просто хотел бы знать, может ли один из вариантов генерировать ошибки. До сих пор у меня не было никаких проблем. Лучше быть в безопасности, чем извиняться;) – andehhh

ответ

2

Основным преимуществом функции format() является то, что вы можете использовать параметры:

execute format(' 
    UPDATE %I 
    SET username = current_user, 
     time = current_timestamp::timestamp(0);', 
    TG_ARGV[0]); 

Подробнее в the documentation.

+0

Не лучше ли использовать ['EXECUTE ... USING ...'] (https://www.postgresql.org/docs/current/static/plpgsql-statements.html # PLPGSQL-STATEMENTS-EXECUTING-DYN) для этого? –

+0

@LaurenzAlbe 'USING' может связывать только значения, а не идентификаторы (как в исходном вопросе). – pozs

+0

К сожалению, вы правы. –

Смежные вопросы