2017-11-08 11 views
1

タイプQueryFilepg-promiseに再利用できますか?複数回pg QueryFileを再利用することが許可されています

例:

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を作成しています。例:

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

[its API](http://vitaly-t.github.io/pg-promise/QueryFile.html)の「重要な部分」を読んだことがありますか?このタイプは、ファイルへの仮想リンクであり、一度だけ作成されます。 –

+0

この使用パターンは恐ろしいです、私は以下の答えで説明します;) –

答えて

1

複数回pg QueryFileを再利用することはできますか?

いいえ、許可されていません。


タイプQueryFileは、ファイルへの仮想リンクを表しており、その使用は多くの利点を提供しています - as documented

  • 解析と早期のエラー検出とコンパクトなクエリのSQL(オプションminify/compress)を、縮小化:

    2つのキーが懸念はこの質問であることを特徴としています。

  • 外部SQLの変更は、アプリケーションを再起動せずに、自動的に再ロードされます(オプションdebug)。オプションminify/compressが提供される場合

最初のものは、ファイルをロードし、それを解析し、minifies。とにかく無意味なので、これは時間とIOを必要とし、何回も実行すべきではありません。

2番目のポイントは、開発モード(オプションdebug)でファイルの変更を自動的に検出し、ファイルを自動的にリロードして準備する仮想リンクとして使用できます。開発環境では、この機能は貴重です。外部SQLファイルが変更されるたびにアプリケーションをリロードすることができません。


だから、短所は以下のとおりです。

  • は不要なIOを(余分なファイルが+ SQLの解析と縮小を読み込み)を作成。そして、あなたの例ではそれはさらに悪くなります - あなたはクエリを実行するたびにそれをやっています。
  • タイプQueryFileは、あなたがその最もに対してタイプを使用している、(オートリロードが不可能になる)

、同じファイルの再作成するQueryFileタイプを設計された主要な機能を失います有用な目的。これがあなたに警告を報告するのはCreating a duplicate QueryFile object for the same fileです。

pg-promise-demoに表示されているように、SQLファイル用に別の構造を設定する必要があります(hereを参照)。

関連する問題