{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/2021-03-21/pg-promise-basic-usage","result":{"data":{"markdownRemark":{"id":"cb0c1bea-dc76-5526-b29a-599cf012cf51","html":"<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 960px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/f59ec9edbe39b4b1ffaab3debe32a4ec/2bef9/banner.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 31.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA9UlEQVQY02NoPKn5v/mM+v+m0xpgjMyGYZCajstK/2Nnev9X9m76rxlc818jqBaM1QProOw6MGZANhCZbrug+r/1vOr/lnNq/9svqvyvOaz7Xzey4r+afz3YEBXfRrhhEBqLgSDcclbtf+0R3f8pi1z/Z6+x+1+01fx/5kqH//FzvP571sf9dy5L+W9XkPHfpSL5v1ZoNX4Xgg0EuqjmkN7/hLme/9OWOv8v2mLxP3G++3/b/EywIfaFGWDsVJpK2EBkuvWcKti13dcU/odPDPyv4NHyX9Wv4b8q0Muq/g3EexnOPgVxbfkeI0jYBdSjRAauSAEAo6QJ4t1yTX0AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/f59ec9edbe39b4b1ffaab3debe32a4ec/8ac56/banner.webp 240w,\n/static/f59ec9edbe39b4b1ffaab3debe32a4ec/d3be9/banner.webp 480w,\n/static/f59ec9edbe39b4b1ffaab3debe32a4ec/e46b2/banner.webp 960w,\n/static/f59ec9edbe39b4b1ffaab3debe32a4ec/a9a89/banner.webp 1024w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/f59ec9edbe39b4b1ffaab3debe32a4ec/8ff5a/banner.png 240w,\n/static/f59ec9edbe39b4b1ffaab3debe32a4ec/e85cb/banner.png 480w,\n/static/f59ec9edbe39b4b1ffaab3debe32a4ec/d9199/banner.png 960w,\n/static/f59ec9edbe39b4b1ffaab3debe32a4ec/2bef9/banner.png 1024w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/f59ec9edbe39b4b1ffaab3debe32a4ec/d9199/banner.png\"\n            alt=\"banner\"\n            title=\"banner\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>ref. v 9.3.3<br>\n<a href=\"https://www.npmjs.com/package/pg-promise\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://www.npmjs.com/package/pg-promise</a><br>\n<a href=\"http://vitaly-t.github.io/pg-promise/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">http://vitaly-t.github.io/pg-promise/</a><br>\n<a href=\"https://github.com/vitaly-t/pg-promise/wiki\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://github.com/vitaly-t/pg-promise/wiki</a><br></p>\n<hr>\n<p>기본 사용법 + 쓸 거 같은 기능 정리 + 예시</p>\n<br>\n<h2 id=\"init\" style=\"position:relative;\"><a href=\"#init\" aria-label=\"init permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>init</h2>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> pgp <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'pg-promise'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  promiseLib<span class=\"token operator\">:</span> promise\n  <span class=\"token comment\">// Overrides the default (ES6 Promise) promise library for its internal use.</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Database connection details</span>\n<span class=\"token comment\">// more details : https://github.com/vitaly-t/pg-promise/wiki/Connection-Syntax</span>\n<span class=\"token keyword\">const</span> cn <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  host<span class=\"token operator\">:</span> <span class=\"token string\">'localhost'</span><span class=\"token punctuation\">,</span> \n  port<span class=\"token operator\">:</span> <span class=\"token number\">5432</span><span class=\"token punctuation\">,</span>\n  database<span class=\"token operator\">:</span> <span class=\"token string\">'products'</span><span class=\"token punctuation\">,</span>\n  user<span class=\"token operator\">:</span> <span class=\"token string\">'user-name'</span><span class=\"token punctuation\">,</span>    \n  password<span class=\"token operator\">:</span> <span class=\"token string\">'user-password'</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> db <span class=\"token operator\">=</span> <span class=\"token function\">pgp</span><span class=\"token punctuation\">(</span>cn<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// const db = pgp('postgres://john:pass123@localhost:5432/products'</span></code></pre></div>\n<br>\n<br>\n<h2 id=\"database-function-for-running-query\" style=\"position:relative;\"><a href=\"#database-function-for-running-query\" aria-label=\"database function for running query permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Database function for running query</h2>\n<p><a href=\"http://vitaly-t.github.io/pg-promise/Database.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">http://vitaly-t.github.io/pg-promise/Database.html</a></p>\n<h3 id=\"any\" style=\"position:relative;\"><a href=\"#any\" aria-label=\"any permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>any</h3>\n<p>0 이상의 결과(row)를 반환하는 쿼리</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span><span class=\"token function\">any</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SELECT * FROM users'</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'>>>>'</span><span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">//[ { name : \"aaa\", email : \"aaa@email.address\" }, </span>\n    <span class=\"token comment\">//  { name : \"bbb\", email : \"bbb@email.address\" }, ... ]</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'>>>>'</span><span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<h3 id=\"each\" style=\"position:relative;\"><a href=\"#each\" aria-label=\"each permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>each</h3>\n<p>any의 결과로 얻은 각 row에 대해 함수를 실행  → (rows). forEach()</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">let</span> index <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\ndb<span class=\"token punctuation\">.</span><span class=\"token function\">each</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SELECT * FROM users'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">row</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  row<span class=\"token punctuation\">.</span>name <span class=\"token operator\">=</span> row<span class=\"token punctuation\">.</span>name <span class=\"token operator\">+</span> index<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n   console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n   <span class=\"token comment\">// [{ name : \"aaa1\", ... }, { name : \"bbb2\", ... }, ... ]</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n   console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<h3 id=\"func\" style=\"position:relative;\"><a href=\"#func\" aria-label=\"func permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>func</h3>\n<p>SELECT * FROM funcName(values)</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// function defined in postgresql</span>\ncreate or replace <span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nreturns Date <span class=\"token keyword\">as</span> $cur$\n  begin\n    <span class=\"token keyword\">return</span> <span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  end<span class=\"token punctuation\">;</span>\n$cur$ language plpgsql<span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// node</span>\ndb<span class=\"token punctuation\">.</span><span class=\"token function\">func</span><span class=\"token punctuation\">(</span><span class=\"token string\">'foo'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// [ { \"foo\": \"2019-10-03T15:00:00.000Z\" } ]</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<br>\n<h3 id=\"map\" style=\"position:relative;\"><a href=\"#map\" aria-label=\"map permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>map</h3>\n<p><code class=\"language-text\">Creates a new array with the results of calling a provided function on every element in ther array of rows resolved by method any.</code>라고 명시되어 then의 parm이 map 내부 return 값들의 배열이 되기를 기대하였으나, any의 결과를 return 한다.<br>\napi 문서와 다른 예시를 보았을 때 단독 사용보다는 task/tx와 함께 사용되는 것 같다.</p>\n<p><a href=\"http://vitaly-t.github.io/pg-promise/Database.html#map/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">http://vitaly-t.github.io/pg-promise/Database.html#map/</a>\n<a href=\"https://codeday.me/ko/qa/20190406/259937.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://codeday.me/ko/qa/20190406/259937.html</a></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span><span class=\"token function\">each</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SELECT * FROM users'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">row</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">return</span> row<span class=\"token punctuation\">.</span>name <span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// expect</span>\n    <span class=\"token comment\">//    [ \"aaa\", \"bbb\", ... ]</span>\n    <span class=\"token comment\">// result</span>\n    <span class=\"token comment\">//    [ { name : \"aaa\", email : \"aaa@email.address\" }, </span>\n    <span class=\"token comment\">//      { name : \"bbb\", email : \"bbb@email.address\" }, ... ]</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<h3 id=\"multi\" style=\"position:relative;\"><a href=\"#multi\" aria-label=\"multi permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>multi</h3>\n<p>return data를 가지도 별다른 행위를 하지 않는 복수의 쿼리를 실행하며, 쿼리들의 수행 결과들의 배열을 반환한다. BEGIN/COMMIT를 사용하지 않는 이상 쿼리들은 단일 트랜젝션으로 수행된다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span><span class=\"token function\">multi</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SELECT * FROM users;SELECT * FROM class'</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">[</span>users<span class=\"token punctuation\">,</span> <span class=\"token keyword\">class</span><span class=\"token punctuation\">]</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'>>>>> users'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>users<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'>>>>> class'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token comment\">// >>>>> users</span>\n    <span class=\"token comment\">// [ { name : \"aaa\", email : \"aaa@email.address\" }, </span>\n    <span class=\"token comment\">//   { name : \"bbb\", email : \"bbb@email.address\" }, ... ]</span>\n    <span class=\"token comment\">// >>>>> class</span>\n    <span class=\"token comment\">// [ { name : \"c1\", room : \"1\" }, </span>\n    <span class=\"token comment\">//   { name : \"c2\", room : \"2\" }, ... ]</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// error</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<h3 id=\"none\" style=\"position:relative;\"><a href=\"#none\" aria-label=\"none permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>none</h3>\n<p>return 되는 데이터가 존재하지 않는 쿼리. return이 존재한다면 reject 된다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span><span class=\"token function\">none</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"UPDATE users SET last_locations=$1 WHERE email=$2\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>value<span class=\"token punctuation\">,</span> email<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'>>>> success'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'>>>>'</span><span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<h3 id=\"one\" style=\"position:relative;\"><a href=\"#one\" aria-label=\"one permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>one</h3>\n<p>단 하나의 row를 return 하는 쿼리. return이 0 또는 2 이상이면 reject 된다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span><span class=\"token function\">one</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SELECT count(*) FROM Users'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">c</span> <span class=\"token operator\">=></span> c<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">count</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>count<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// integer</span>\n   <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<h3 id=\"query\" style=\"position:relative;\"><a href=\"#query\" aria-label=\"query permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>query</h3>\n<p>query(query, values, qrm), qrm(<a href=\"http://vitaly-t.github.io/pg-promise/global.html#queryResult\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Query Result Mask</a>)의 입력값 형태의 리턴을 가지는 쿼리를 실행.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span><span class=\"token function\">query</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SELECT name FROM Users where name=\\'xxx\\''</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> pgp<span class=\"token punctuation\">.</span>queryResult<span class=\"token punctuation\">.</span>one <span class=\"token operator\">+</span> pgp<span class=\"token punctuation\">.</span>queryResult<span class=\"token punctuation\">.</span>none<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<br>\n<h3 id=\"result\" style=\"position:relative;\"><a href=\"#result\" aria-label=\"result permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>result</h3>\n<p>return data에 대한 어떠한 기댓값이 없는 쿼리. 성공 시 <a href=\"https://node-postgres.com/api/result\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Result</a>를 결과값으로 가진다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span><span class=\"token function\">result</span><span class=\"token punctuation\">(</span><span class=\"token string\">'DELETE FROM users WHERE name=\\'kkk\\''</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Result {</span>\n<span class=\"token comment\">//   command: 'DELETE',</span>\n<span class=\"token comment\">//   rowCount: 1,</span>\n<span class=\"token comment\">//   oid: null,</span>\n<span class=\"token comment\">//   rows: [],</span>\n<span class=\"token comment\">//   fields: [],</span>\n<span class=\"token comment\">//   _parsers: [],</span>\n<span class=\"token comment\">//   _types:</span>\n<span class=\"token comment\">//   TypeOverrides {</span>\n<span class=\"token comment\">//     _types:</span>\n<span class=\"token comment\">//     { getTypeParser: [Function: getTypeParser],</span>\n<span class=\"token comment\">//       setTypeParser: [Function: setTypeParser],</span>\n<span class=\"token comment\">//       arrayParser: [Object],</span>\n<span class=\"token comment\">//       builtins: [Object] },</span>\n<span class=\"token comment\">//     text: {},</span>\n<span class=\"token comment\">//     binary: {} },</span>\n<span class=\"token comment\">//   RowCtor: null,</span>\n<span class=\"token comment\">//   rowAsArray: false,</span>\n<span class=\"token comment\">//   duration: 5 }</span></code></pre></div>\n<br>\n<h3 id=\"task\" style=\"position:relative;\"><a href=\"#task\" aria-label=\"task permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>task</h3>\n<p>Executes a callback <u><em>function</em></u> with automatically managed connection.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span><span class=\"token function\">task</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">t</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> t<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SELECT email FROM congress_participants WHERE congress_id=\\'C1\\' and role = \\'visitor\\''</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">row</span> <span class=\"token operator\">=></span> row<span class=\"token punctuation\">.</span>email<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">rows</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n              <span class=\"token keyword\">let</span> str <span class=\"token operator\">=</span>  <span class=\"token string\">'(\\''</span> <span class=\"token operator\">+</span> rows<span class=\"token punctuation\">.</span><span class=\"token function\">join</span><span class=\"token punctuation\">(</span><span class=\"token string\">'\\', \\''</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">'\\')'</span><span class=\"token punctuation\">;</span>\n              <span class=\"token keyword\">return</span> t<span class=\"token punctuation\">.</span><span class=\"token function\">any</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SELECT * from users where email IN '</span> <span class=\"token operator\">+</span> str<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<br>\n<h3 id=\"tx\" style=\"position:relative;\"><a href=\"#tx\" aria-label=\"tx permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>tx</h3>\n<p>Executes a callback <u><em>function as a <strong>transaction</strong></em></u>, with automatically managed connection.</p>\n<ul>\n<li>it executes <strong>BEGIN</strong> just before invoking the callback function</li>\n<li>it executes <strong>COMMIT</strong>, if the callback didn’t throw any error or return a rejected promise</li>\n<li>it executes <strong>ROLLBACK</strong>, if the callback did throw an error or return a rejected promise</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span><span class=\"token function\">tx</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">t</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> t<span class=\"token punctuation\">.</span><span class=\"token function\">one</span><span class=\"token punctuation\">(</span><span class=\"token string\">'INSERT INTO users(email, name) VALUES($1, $2) RETURNING email'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'nnn@email.address'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'nnn'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n          <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">email</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">return</span> t<span class=\"token punctuation\">.</span>\n          <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n        <span class=\"token keyword\">return</span> t<span class=\"token punctuation\">.</span><span class=\"token function\">one</span><span class=\"token punctuation\">(</span><span class=\"token string\">'INSERT INTO Users(name, age) VALUES($1, $2) RETURNING id'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'Mike'</span><span class=\"token punctuation\">,</span> <span class=\"token number\">25</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">user</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">return</span> t<span class=\"token punctuation\">.</span><span class=\"token function\">none</span><span class=\"token punctuation\">(</span><span class=\"token string\">'INSERT INTO congress_participants(email, congress_id, role) VALUES($1, $2, $3)'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>user<span class=\"token punctuation\">.</span>eamil<span class=\"token punctuation\">,</span> <span class=\"token string\">'C1'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'visitor'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n      console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'>>>> success'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n      console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'>>>>'</span><span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"queryresulterror\" style=\"position:relative;\"><a href=\"#queryresulterror\" aria-label=\"queryresulterror permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>QueryResultError</h3>\n<p>함수가 reject 될 시 발생하는 에러. api 문서에서 각 함수의 하단부에 어떤 값으로 리턴될지 명시되어 있다.<br>\n<a href=\"http://vitaly-t.github.io/pg-promise/errors.QueryResultError.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">http://vitaly-t.github.io/pg-promise/errors.QueryResultError.html</a></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 576px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/5e42fef760c29ad72b714e733eb498bd/533c1/query_result_error.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 54.58333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB+klEQVQoz41TaW/aQBDlhwcpfGgDlHCUQwar5jAJTWhTc8QO3vUNBGxX4h+9zmxaqKpW6ofnmVnvvp3jbcF2HCyXK0jpIc/z/0KWZUjT9K8oJEkC3/cRhiGiKEIUx2RjxMpGCnGcgPcx+N/hcFCkfyIlFPggE3qeDyEkWU9BEi6xTxW8+UII7Hc7pMcjUiI+Hl7VBUeKs4wyZGYmtG0b2+1WHeJsmcz3A5WpIiQEQQBJazKMCYmC49IldMZ1xVvJ/AmIgAlNc4r+YABd1zF/fECv24HW6ynbaX8kv4t2T0NdN1HpT1DRxqhqI9w9zM99VYSn0wk7KqNYLKJ4dYXhxMS99YzmYISOMUVDM9D5NIE2ukOdfN0gkvGQYGBmjjH/PMN3HtY5w4AzdGAMh+j3+7DWNr44Hiw3wLcXHyuyC/YdiSeK1y71e5fiOcmxTjLY2xxye7hkyA3l/rRaLZTLZSqxi0e6tdmo47ZWQ/nmBvXbGj5Uq6hWKsq+q9RQbbbxvtZAVzewP6YXQgbLo1QqoXR9jdlXC/dOiOGTg5G1gWm9YEJga9DadLGBcDeQwsVyYcGTAvlP6ShCnqZlLbBarZQsWDIbQdOT3tt0wwgbV8Kl2KV1jydNMmIlDGiI/Dh+aVPJZr/fq7EL2sTlqxdxFmyqbP4bsn+Ak/sBe7m1BR49I9QAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/5e42fef760c29ad72b714e733eb498bd/8ac56/query_result_error.webp 240w,\n/static/5e42fef760c29ad72b714e733eb498bd/d3be9/query_result_error.webp 480w,\n/static/5e42fef760c29ad72b714e733eb498bd/6264f/query_result_error.webp 576w\"\n              sizes=\"(max-width: 576px) 100vw, 576px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/5e42fef760c29ad72b714e733eb498bd/8ff5a/query_result_error.png 240w,\n/static/5e42fef760c29ad72b714e733eb498bd/e85cb/query_result_error.png 480w,\n/static/5e42fef760c29ad72b714e733eb498bd/533c1/query_result_error.png 576w\"\n            sizes=\"(max-width: 576px) 100vw, 576px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/5e42fef760c29ad72b714e733eb498bd/533c1/query_result_error.png\"\n            alt=\"query-result-error\"\n            title=\"query-result-error\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span><span class=\"token function\">one</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SELECT name FROM Users where name=\\'xxx\\''</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">c</span> <span class=\"token operator\">=></span> <span class=\"token operator\">+</span>c<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">count</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n<span class=\"token comment\">// QueryResultError {</span>\n<span class=\"token comment\">//    code: queryResultErrorCode.noData</span>\n<span class=\"token comment\">//    message: \"No data returned from the query.\"</span>\n<span class=\"token comment\">//    received: 0</span>\n<span class=\"token comment\">//    query: \"SELECT name FROM Users where name='xxx'\"</span>\n<span class=\"token comment\">// }</span></code></pre></div>\n<br>\n<h3 id=\"return-되는-row에-따른-함수-정리\" style=\"position:relative;\"><a href=\"#return-%EB%90%98%EB%8A%94-row%EC%97%90-%EB%94%B0%EB%A5%B8-%ED%95%A8%EC%88%98-%EC%A0%95%EB%A6%AC\" aria-label=\"return 되는 row에 따른 함수 정리 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>return 되는 row에 따른 함수 정리</h3>\n<table>\n<thead>\n<tr>\n<th align=\"left\">function</th>\n<th align=\"left\">expects number of rows(n)</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td align=\"left\">any(=manyOrNone)</td>\n<td align=\"left\">0 or more</td>\n</tr>\n<tr>\n<td align=\"left\">none</td>\n<td align=\"left\">0</td>\n</tr>\n<tr>\n<td align=\"left\">one</td>\n<td align=\"left\">1</td>\n</tr>\n<tr>\n<td align=\"left\">oneOrNone</td>\n<td align=\"left\">1 or null(none)</td>\n</tr>\n<tr>\n<td align=\"left\">many</td>\n<td align=\"left\">1 or more</td>\n</tr>\n</tbody>\n</table>\n<br>\n<br>\n<h2 id=\"helpers\" style=\"position:relative;\"><a href=\"#helpers\" aria-label=\"helpers permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Helpers</h2>\n<h3 id=\"update\" style=\"position:relative;\"><a href=\"#update\" aria-label=\"update permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>update</h3>\n<p>update(data, columns, table, options), 하나 혹은 배열 객체에 대한 UPDATE 쿼리를 생성한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> data_single <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> email<span class=\"token operator\">:</span> <span class=\"token string\">'aaa@email.address'</span><span class=\"token punctuation\">,</span> last_location<span class=\"token operator\">:</span> <span class=\"token string\">'S1'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\npgp<span class=\"token punctuation\">.</span>helpers<span class=\"token punctuation\">.</span><span class=\"token function\">update</span><span class=\"token punctuation\">(</span>data_single<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'last_location'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'users'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">' WHERE email = '</span> <span class=\"token operator\">+</span> data_single<span class=\"token punctuation\">.</span>email<span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// UPDATE 'data_single' SET 'last_location' = 'S1' WHERE email = 'aaa@email.address'</span>\n\n<span class=\"token keyword\">const</span> data_multi <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span> email<span class=\"token operator\">:</span> <span class=\"token string\">'aaa@email.address'</span><span class=\"token punctuation\">,</span> last_location<span class=\"token operator\">:</span> <span class=\"token string\">'S1'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\t\t\t        <span class=\"token punctuation\">{</span> email<span class=\"token operator\">:</span> <span class=\"token string\">'bbb@email.address'</span><span class=\"token punctuation\">,</span> last_location<span class=\"token operator\">:</span> <span class=\"token string\">'S2'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span>\npgp<span class=\"token punctuation\">.</span>helpers<span class=\"token punctuation\">.</span><span class=\"token function\">update</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'?email'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'last_location'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'users'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">' WHERE v.email = t.email'</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// UPDATE 'data_multi' AS t SET 'last_location' = v.'last_location' </span>\n<span class=\"token comment\">//   FROM (VALUES('aaa@email.address','S1'),('bbb@email.address','S2'))</span>\n<span class=\"token comment\">//   AS v('email', 'last_location')</span>\n<span class=\"token comment\">//   WHERE v.email = t.email</span></code></pre></div>\n<br>\n<h4 id=\"values\" style=\"position:relative;\"><a href=\"#values\" aria-label=\"values permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>values</h4>\n<p>values(data, columns), 쿼리에서 사용할 수 있는 쉼표로 구분된 문자열을 생성한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> dataSingle <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>val<span class=\"token operator\">:</span> <span class=\"token number\">123</span><span class=\"token punctuation\">,</span> msg<span class=\"token operator\">:</span> <span class=\"token string\">'hello'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> dataMulti <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span>val<span class=\"token operator\">:</span> <span class=\"token number\">123</span><span class=\"token punctuation\">,</span> msg<span class=\"token operator\">:</span> <span class=\"token string\">'hello'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>val<span class=\"token operator\">:</span> <span class=\"token number\">456</span><span class=\"token punctuation\">,</span> msg<span class=\"token operator\">:</span> <span class=\"token string\">'world!'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\npgp<span class=\"token punctuation\">.</span>helpers<span class=\"token punctuation\">.</span><span class=\"token function\">values</span><span class=\"token punctuation\">(</span>dataSingle<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">//(123,'hello')</span>\n\npgp<span class=\"token punctuation\">.</span>helpers<span class=\"token punctuation\">.</span><span class=\"token function\">values</span><span class=\"token punctuation\">(</span>dataMulti<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'val'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'msg'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">//(123,'hello'),(456,'world!')</span></code></pre></div>","fields":{"slug":"/posts/2021-03-21/pg-promise-basic-usage","tagSlugs":["/tag/pg-promise/"]},"frontmatter":{"date":"2021-03-21T16:26:32.169Z","description":"pg-promise 기본 사용법","tags":["pg-promise"],"title":"pg-promise basic usage","socialImage":{"publicURL":"/static/f59ec9edbe39b4b1ffaab3debe32a4ec/banner.png"}}}},"pageContext":{"slug":"/posts/2021-03-21/pg-promise-basic-usage"}},"staticQueryHashes":["251939775","401334301","825871152"]}