我可以重复使用QueryFile的pg-promise类型吗?
例如
const pgp = require(`pg-promise`)(options);
const QueryFile = pgp.QueryFile;
const db = pgp(config.DB);
const query = new QueryFile('queryPath/some.sql', { minify: true });
// running sql query
db.any(query, []);
db.any(query, []);
db.any(query, []);
db.any(query, []);
db.any(query, []);
目前,我每次要执行它时都会创建新的QueryFile。 e.g。
db.any(new QueryFile('queryPath/some.sql', { minify: true }), []);
db.any(new QueryFile('queryPath/some.sql', { minify: true }), []);
db.any(new QueryFile('queryPath/some.sql', { minify: true }), []);
db.any(new QueryFile('queryPath/some.sql', { minify: true }), []);
如果我多次重复使用同一个查询,是否有任何缺点?
答案 0 :(得分:1)
是否允许多次重用pg QueryFile?
不,不允许,坚持!
类型QueryFile表示文件的虚拟链接,其使用提供了许多优势 - as documented。
与此问题相关的两个关键功能是:
- 解析和缩小SQL(选项
minify/compress
),以便进行早期错误检测和紧凑查询。- 可以自动重新加载外部SQL的更改(选项
debug
),而无需重新启动应用程序。
如果提供了选项minify
/ compress
,则第一个加载文件,解析并缩小文件。这需要时间和IO,并且不应该多次完成,因为它无论如何都是毫无意义的。
第二点允许它用作虚拟链接,可以在开发模式(选项debug
)中自动检测任何文件更改,并自动重新加载和准备文件。在开发环境中,此功能是无价的,无法在外部SQL文件发生更改时重新加载应用程序。
所以缺点是:
当您为同一个文件重新创建QueryFile类型时,您使用的是最有用的类型。这就是为什么它会以Creating a duplicate QueryFile object for the same file
为您报告警告。
您应该为SQL文件设置一个单独的结构,如pg-promise-demo中所示,请参阅here。