2016-08-29 4 views
0

Каким будет результат quote_ident(table_name::text) и какая разница, если мы передадим его, а не таблицу в инструкции конвейера? Для например, есть разница междуРазница между возвращаемым значением funciton

CREATE TRIGGER audit_trigger_stm AFTER ' || stm_targets || ' ON ' || quote_ident(table_name::text) ... 

и этот

CREATE TRIGGER audit_trigger_stm AFTER ' || stm_targets || ' ON ' || table_name ... 
+0

Не могли бы вы расширить этот вопрос на примере того, как вы хотите его использовать? Что вы подразумеваете под * конвейерным заявлением *? –

+0

Да, я привел пример – user6770216

+0

Вы не можете использовать выражение в этом контексте. [Синтаксис] (https://www.postgresql.org/docs/9.5/static/sql-createtrigger.html) ясен: – klin

ответ

2

Разница заключается в том, что без использования quote_ident ваша состоит утверждение становится недействительным, если table_name содержит пробелы, двойные кавычки или другие тонкости (или зарезервированное SQL).

Кроме того, использование quote_ident экономит вас от внедрения SQL, если table_name происходит от ненадежного источника.