Search code examples
postgresqlnode-postgres

How can I use a variable as the table name in node-pg?


For example I have a query like:

      const rows = await db.query(
        "SELECT * FROM $1 WHERE email = $2 AND password = $3",
        [tableName, email, password]
      );

It gives me a syntax error.


Solution

  • This is not possible, parameterised queries only work for values (instead of literals) but not for identifiers. You will need to build the SQL string:

    const rows = await db.query(
      `SELECT * FROM ${db.escapeIdentifier(tableName)} WHERE email = $1 AND password = $2`,
      [email, password]
    );
    

    (Assuming the db is a PgClient)

    If you know the possible values of the tableName variable beforehand, you might get away without escaping; if you don't, you better also specify the schema explicitly.