#sql #postgresql
#sql #postgresql
Вопрос:
В PostgreSQL можно ли параметризовать имя таблицы, используемое в запросе?
Комментарии:
1. Нет (и не только в Postgres это невозможно). Для этого вам нужен динамический SQL.
2. Нам нужно больше контекста, поскольку некоторые библиотеки, такие как Python
pyscopg2
, поддерживают экранирующие идентификаторы, такие как имена таблиц.
Ответ №1:
Рассматривайте параметры только как замену скалярных значений. Используйте один параметр в том месте, где вы могли бы использовать один строковый или числовой литерал.
Вы не можете использовать параметры для других частей SQL-запроса:
- Идентификаторы, такие как имена таблиц, имена столбцов и т.д.
- Ключевые слова SQL
- Выражения
- Списки значений, например, в
IN (...)
предикате. Для каждого значения в списке потребуется отдельный параметр.
Все эти части SQL-запроса должны быть исправлены к моменту обработки запроса во prepare()
время. Если клиентская библиотека поддерживает «параметры» для идентификаторов, она действительно выполняет интерполяцию строк в SQL-запрос перед анализом запроса.