Нельзя использовать заполнители ($1
) для идентификаторов (таких как имена столбцов и таблиц), заполнители только для значений; вы можете думать об этом как о разнице между 'name'
(значение) и var name
(идентификатор).
Вместо этого вы можете использовать манипуляции со строками, и вы захотите добавить идентификатор в белый список, чтобы избежать проблем:
const safeTables = [ 'person', ... ]; // Known safe values.
if(!safeTables.includes(table)) {
// throw an exception, return an error, ...
}
const response = await pool.query(`SELECT * FROM ${table}`);
Эта интерполяция строк безопасна, поскольку вы разрешаете только известные безопасные значения. Вы также можете использовать функцию, которая знает, как правильно заключать в кавычки идентификаторы (например, escape.ident
из pg-escape ).