首页 > 解决方案 > pg-promise 中的动态表名

问题描述

我想在 pg-promise 查询中动态选择表。以下代码不起作用,感谢任何帮助!

return db.any('SELECT * from $1', table_name)

我得到的错误信息是:

error:  error: syntax error at or near 

我不确定我是否应该使用帮助器,如以下链接所述: https ://vitaly-t.github.io/pg-promise/helpers.TableName.html

标签: pg-promise

解决方案


直接的方法是通过SQL Names

await db.any('SELECT * from $1:name', [table]);
// or
await db.any('SELECT * from ${table:name}', {table});

并使用架构:

await db.any('SELECT * from $1:name.$2:name', [schema, table]);
// or
await db.any('SELECT * from ${schema:name}.${table:name}', {schema, table});

更通用的方法是通过TableName

const tn = new pgp.helpers.TableName({schema, table});

await db.any('SELECT * from $1', [tn]);
// or
await db.any('SELECT * from ${tn}', {tn});

推荐阅读