PostgreSQL можно ли параметризовать имя таблицы, используемое в запросе?

#sql #postgresql

#sql #postgresql

Вопрос:

В PostgreSQL можно ли параметризовать имя таблицы, используемое в запросе?

Комментарии:

1. Нет (и не только в Postgres это невозможно). Для этого вам нужен динамический SQL.

2. Нам нужно больше контекста, поскольку некоторые библиотеки, такие как Python pyscopg2 , поддерживают экранирующие идентификаторы, такие как имена таблиц.

Ответ №1:

Рассматривайте параметры только как замену скалярных значений. Используйте один параметр в том месте, где вы могли бы использовать один строковый или числовой литерал.

Вы не можете использовать параметры для других частей SQL-запроса:

  • Идентификаторы, такие как имена таблиц, имена столбцов и т.д.
  • Ключевые слова SQL
  • Выражения
  • Списки значений, например, в IN (...) предикате. Для каждого значения в списке потребуется отдельный параметр.

Все эти части SQL-запроса должны быть исправлены к моменту обработки запроса во prepare() время. Если клиентская библиотека поддерживает «параметры» для идентификаторов, она действительно выполняет интерполяцию строк в SQL-запрос перед анализом запроса.