我可以重复使用QueryFilepg-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, []);

目前,我正在创建新的查询文件,每次我想执行它。
例如
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 }), []);

如果我多次重复使用同一个查询有什么缺点吗?

最佳答案

是否允许多次重用pg QueryFile?
不,不允许,坚持!
类型QueryFile表示指向文件的虚拟链接,它的使用提供了许多优点-as documented
有关此问题的两个关键功能是:
解析和缩小SQL(optionsminify/compress),用于早期错误检测和压缩查询。
外部SQL中的更改可以自动重新加载(选项debug),而无需重新启动应用程序。
如果提供了minify/compress选项,第一个选项将加载文件,并对其进行解析和缩小。这需要时间和IO,不应该多次执行,因为无论如何这都是没有意义的。
第二点允许它用作虚拟链接,在开发模式下(选项debug)可以自动检测任何文件更改,并自动重新加载和准备文件。在开发环境中,此功能是无价的,可防止您在外部SQL文件更改时重新加载应用程序。
所以缺点是:
创建不必要的IO(额外的文件读取+SQL解析和缩小)。在您的示例中,情况更糟-每次执行查询时都会这样做。
失去了设计类型QueryFile的关键功能(无法自动重新加载)
当您为同一个文件重新创建QueryFile类型时,您将使用该类型来达到其最有用的目的。这就是为什么它会将警告报告为Creating a duplicate QueryFile object for the same file
您应该为SQL文件设置一个单独的结构,如pg-promise-demo中所示,请参见here

关于javascript - 是否可以多次重用pg QueryFile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47175056/

10-12 05:03