2017-11-08 16 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

[해당 API] (http://vitaly-t.github.io/pg-promise/QueryFile.html)의 '중요'섹션을 읽었습니까? 이 유형은 한 번만 생성 될 파일에 대한 가상 링크입니다. –

+0

아래의 답변에서 설명하는 것처럼이 사용 패턴은 끔찍합니다.) –

답변

1

pg QueryFile을 여러 번 다시 사용할 수 있습니까?

아니요, 주장하지 마세요.


유형 QueryFile는 파일에 가상 링크를 나타내고, 그 사용은 많은 장점을 제공합니다 - as documented. 초기 오류 감지 및 소형 쿼리에 대한

  • 구문 분석 및 축소에 SQL (옵션 minify/compress) :

    두 키는이 질문이 우려를하고 있습니다.

  • 외부 SQL의 변경 사항은 앱을 다시 시작하지 않고도 자동으로 다시로드 할 수 있습니다 (옵션 debug). 옵션 minify/compress가 제공되는 경우

첫 번째는, 파일을로드를 분석하고 축소하고. 이것은 시간과 IO를 필요로하며, 어쨌든 무의미한 것처럼 여러 번해서는 안됩니다.

두 번째 점은 개발 모드 (옵션 debug)에서 파일 변경을 자동으로 감지하고 파일을 자동으로 다시로드하고 준비 할 수있는 가상 링크로 사용할 수 있습니다. 개발 환경에서이 기능은 값을 매길 수 없으므로 외부 SQL 파일이 변경 될 때마다 응용 프로그램을 다시로드 할 수 없습니다.


그래서 단점은 다음과 같습니다

  • 불필요한 IO 만들기 (추가 파일 + SQL 구문 분석 및 축소를 읽고). 그리고 당신의 예제에서 그것은 더 나빠집니다 - 당신은 질의를 실행할 때마다 그것을하고 있습니다.
  • 유형 QueryFile 설계되었다되는 주요 기능을 잃는

을 (자동 장전이 불가능하게된다) 그리고 당신이 때, 당신은 가장에 대한 유형을 사용하고있는 동일한 파일에 대한 QueryFile 유형을 다시 만들 유용한 목적. 그리고 이것이 당신에게 Creating a duplicate QueryFile object for the same file으로 경고를 보냅니다.

pg-promise-demo에 표시된 것처럼 SQL 파일에 대해 별도의 구조를 설정해야합니다 (here 참조).