Accessing Tailor DB
In order to access Tailor DB from Function service, you need to instantiate the Client
object from the tailordb
package.
tailordb
exists in the Function service environment by default, so you can use it without any additional installation.
Please specify the namespace
of the Tailor DB you want to connect to when creating the Client
object.
Here is the Client
interface:
<span><span style="color: var(--shiki-token-keyword)">export</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">interface</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Client</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">connect</span><span style="color: var(--shiki-color-text)">()</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Promise</span><span style="color: var(--shiki-color-text)"><</span><span style="color: var(--shiki-token-constant)">void</span><span style="color: var(--shiki-color-text)">>;</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">end</span><span style="color: var(--shiki-color-text)">()</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Promise</span><span style="color: var(--shiki-color-text)"><</span><span style="color: var(--shiki-token-constant)">void</span><span style="color: var(--shiki-color-text)">>;</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">queryObject</span><span style="color: var(--shiki-color-text)"><</span><span style="color: var(--shiki-token-function)">T</span><span style="color: var(--shiki-color-text)">>(sql</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">string</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> args</span><span style="color: var(--shiki-token-keyword)">?:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">readonly</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">any</span><span style="color: var(--shiki-color-text)">[])</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Promise</span><span style="color: var(--shiki-color-text)"><{ rows</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">T</span><span style="color: var(--shiki-color-text)">[] }>;</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">createTransaction</span><span style="color: var(--shiki-color-text)">(name</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">string</span><span style="color: var(--shiki-color-text)">)</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Transaction</span><span style="color: var(--shiki-color-text)">;</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">new</span><span style="color: var(--shiki-color-text)">(config</span><span style="color: var(--shiki-token-keyword)">?:</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> namespace</span><span style="color: var(--shiki-token-keyword)">?:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">string</span><span style="color: var(--shiki-color-text)">;</span></span>
<span><span style="color: var(--shiki-color-text)"> })</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Client</span><span style="color: var(--shiki-color-text)">;</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">type</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Transaction</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">begin</span><span style="color: var(--shiki-color-text)">()</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Promise</span><span style="color: var(--shiki-color-text)"><</span><span style="color: var(--shiki-token-constant)">void</span><span style="color: var(--shiki-color-text)">>;</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">commit</span><span style="color: var(--shiki-color-text)">()</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Promise</span><span style="color: var(--shiki-color-text)"><</span><span style="color: var(--shiki-token-constant)">void</span><span style="color: var(--shiki-color-text)">>;</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">rollback</span><span style="color: var(--shiki-color-text)">()</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Promise</span><span style="color: var(--shiki-color-text)"><</span><span style="color: var(--shiki-token-constant)">void</span><span style="color: var(--shiki-color-text)">>;</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">queryObject</span><span style="color: var(--shiki-color-text)"><</span><span style="color: var(--shiki-token-function)">T</span><span style="color: var(--shiki-color-text)">>(sql</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">string</span><span style="color: var(--shiki-token-punctuation)">,</span><span style="color: var(--shiki-color-text)"> args</span><span style="color: var(--shiki-token-keyword)">?:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">readonly</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">any</span><span style="color: var(--shiki-color-text)">[])</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Promise</span><span style="color: var(--shiki-color-text)"><{ rows</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">T</span><span style="color: var(--shiki-color-text)">[] }>;</span></span>
<span><span style="color: var(--shiki-color-text)">};</span></span>
<span></span>
Please refer to the SQL query example for more information on the SQL syntax supported in Client.queryObject
.
Sample codes to access Tailor DB in JavaScript
Getting data from Tailor DB
<span><span style="color: var(--shiki-token-constant)">globalThis</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-function)">main</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">async</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">function</span><span style="color: var(--shiki-color-text)"> () {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">client</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">new</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">tailordb</span><span style="color: var(--shiki-token-function)">.Client</span><span style="color: var(--shiki-color-text)">({</span></span>
<span><span style="color: var(--shiki-color-text)"> namespace</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"galaxy"</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> });</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">client</span><span style="color: var(--shiki-token-function)">.connect</span><span style="color: var(--shiki-color-text)">();</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">starship</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">client</span><span style="color: var(--shiki-token-function)">.queryObject</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"SELECT * FROM Starship"</span><span style="color: var(--shiki-color-text)">);</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">client</span><span style="color: var(--shiki-token-function)">.end</span><span style="color: var(--shiki-color-text)">();</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">return</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Starship"</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">starship</span><span style="color: var(--shiki-color-text)">.rows</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> };</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
Inserting data to Tailor DB
<span><span style="color: var(--shiki-token-constant)">globalThis</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-function)">main</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">async</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">function</span><span style="color: var(--shiki-color-text)"> (args) {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">client</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">new</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">tailordb</span><span style="color: var(--shiki-token-function)">.Client</span><span style="color: var(--shiki-color-text)">({</span></span>
<span><span style="color: var(--shiki-color-text)"> namespace</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"galaxy"</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> });</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">client</span><span style="color: var(--shiki-token-function)">.connect</span><span style="color: var(--shiki-color-text)">();</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">try</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">millis</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">Date</span><span style="color: var(--shiki-token-function)">.now</span><span style="color: var(--shiki-color-text)">()</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">episodes</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">client</span><span style="color: var(--shiki-token-function)">.queryObject</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"SELECT * FROM Episode"</span><span style="color: var(--shiki-color-text)">);</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">len</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">episodes</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">rows</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">length</span><span style="color: var(--shiki-color-text)">;</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">if</span><span style="color: var(--shiki-color-text)"> (len </span><span style="color: var(--shiki-token-keyword)">!==</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">0</span><span style="color: var(--shiki-color-text)">) {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">throw</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">new</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Error</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">`The size of Episode, expected:0 got:</span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-color-text)">len</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)">`</span><span style="color: var(--shiki-color-text)">)</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">fixtures</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> [</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">`</span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-color-text)">millis</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)"> - A New Hope`</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">`</span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-color-text)">millis</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)"> - The Empire Strikes Back`</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">`</span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-color-text)">millis</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)"> - Return of the Jed`</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">`</span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-color-text)">millis</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)"> - </span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-token-constant)">args</span><span style="color: var(--shiki-color-text)">.title</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)">`</span><span style="color: var(--shiki-token-punctuation)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> ]</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">transaction</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">client</span><span style="color: var(--shiki-token-function)">.createTransaction</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"add_episodes"</span><span style="color: var(--shiki-color-text)">);</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">try</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">transaction</span><span style="color: var(--shiki-token-function)">.begin</span><span style="color: var(--shiki-color-text)">();</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">for</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">i</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">of</span><span style="color: var(--shiki-color-text)"> fixtures) {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">ret</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">transaction</span><span style="color: var(--shiki-token-function)">.queryObject</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">`INSERT INTO Episode (title) VALUES ('</span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-color-text)">i</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)">')`</span><span style="color: var(--shiki-color-text)">);</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">transaction</span><span style="color: var(--shiki-token-function)">.commit</span><span style="color: var(--shiki-color-text)">();</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">episodes</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">client</span><span style="color: var(--shiki-token-function)">.queryObject</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">`SELECT * FROM Episode WHERE title like '</span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-color-text)">millis</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)">%'`</span><span style="color: var(--shiki-color-text)">);</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">const</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">len</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">episodes</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">rows</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">length</span><span style="color: var(--shiki-color-text)">;</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">if</span><span style="color: var(--shiki-color-text)"> (len </span><span style="color: var(--shiki-token-keyword)">!==</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">4</span><span style="color: var(--shiki-color-text)">) {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">throw</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">new</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Error</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">`The size of Episode, expected:4 got:</span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-color-text)">len</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)">`</span><span style="color: var(--shiki-color-text)">)</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">return</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> success</span><span style="color: var(--shiki-token-keyword)">:</span><span style="color: var(--shiki-color-text)"> len </span><span style="color: var(--shiki-token-keyword)">===</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">4</span></span>
<span><span style="color: var(--shiki-color-text)"> };</span></span>
<span><span style="color: var(--shiki-color-text)"> } </span><span style="color: var(--shiki-token-keyword)">catch</span><span style="color: var(--shiki-color-text)"> (e) {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">throw</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">new</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">Error</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">`add_episodes failed with error:</span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-color-text)">e</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)">\n</span><span style="color: var(--shiki-token-keyword)">${</span><span style="color: var(--shiki-token-constant)">e</span><span style="color: var(--shiki-color-text)">.cause</span><span style="color: var(--shiki-token-keyword)">}</span><span style="color: var(--shiki-token-string-expression)">`</span><span style="color: var(--shiki-color-text)">)</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> } </span><span style="color: var(--shiki-token-keyword)">finally</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">await</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">client</span><span style="color: var(--shiki-token-function)">.end</span><span style="color: var(--shiki-color-text)">();</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
Deploy sample functions
Directory Structure
Here's the sample directory structure for a Terraform project.
Let's deploy the insert_data_function.js
to Tailor Platform.
In this example, we placed the function code in the scripts
directory.
Since we don't use npm packages in this example, we don't need to bundle the function.
<span><span style="color: var(--shiki-token-function)">.</span></span>
<span><span style="color: var(--shiki-token-function)">├──</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">applications.tf</span></span>
<span><span style="color: var(--shiki-token-function)">├──</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">pipeline.tf</span></span>
<span><span style="color: var(--shiki-token-function)">├──</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">pipeline_insert_data_function.tf</span></span>
<span><span style="color: var(--shiki-token-function)">├──</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">schema</span></span>
<span><span style="color: var(--shiki-token-function)">│ </span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">└──</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">insert_data_function.graphql</span></span>
<span><span style="color: var(--shiki-token-function)">├──</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">scripts</span></span>
<span><span style="color: var(--shiki-token-function)">│ </span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">└──</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">insert_data_function.js</span></span>
<span><span style="color: var(--shiki-token-function)">├──</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">tailordb.tf</span></span>
<span><span style="color: var(--shiki-token-function)">├──</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">variables.tf</span></span>
<span><span style="color: var(--shiki-token-function)">└──</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">workspaces.tf</span></span>
<span></span>
Pipeline Resolver Example
In order to run your function script, specify the function
object inside the Pipeline step's operation.
Here's an example of Terraform code to set up the function in the Pipeline resolver.
<span><span style="color: var(--shiki-color-text)">resource </span><span style="color: var(--shiki-token-string-expression)">"tailor_pipeline_resolver"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"pipeline_insert_data_function"</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> workspace_id </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">tailor_workspace</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">starwars</span><span style="color: var(--shiki-color-text)">.id</span></span>
<span><span style="color: var(--shiki-color-text)"> namespace </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">tailor_pipeline</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">starwars</span><span style="color: var(--shiki-color-text)">.namespace</span></span>
<span><span style="color: var(--shiki-color-text)"> name </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"insertData"</span></span>
<span><span style="color: var(--shiki-color-text)"> description </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"sample mutation resolver"</span></span>
<span><span style="color: var(--shiki-color-text)"> authorization </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> insecure </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)"> sdl </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">file</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"${path.module}/schema/insert_data_function.graphql"</span><span style="color: var(--shiki-color-text)">)</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)"> steps </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> [</span></span>
<span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> name </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"insertData"</span></span>
<span><span style="color: var(--shiki-color-text)"> operation </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">function</span><span style="color: var(--shiki-color-text)"> = {</span></span>
<span><span style="color: var(--shiki-color-text)"> name </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"insertDataFunction"</span></span>
<span><span style="color: var(--shiki-color-text)"> script </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">file</span><span style="color: var(--shiki-color-text)">(</span><span style="color: var(--shiki-token-string-expression)">"${path.module}/scripts/dist/insert_data_function.js"</span><span style="color: var(--shiki-color-text)">)</span></span>
<span><span style="color: var(--shiki-color-text)"> variables </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"({ title: context.args.input.title })"</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> post_script </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> <<</span><span style="color: var(--shiki-token-function)">EOF</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">args</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-function)">insertDataFunction</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-function)">EOF</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> ]</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">input</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">insertDataInput</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> title: </span><span style="color: var(--shiki-token-constant)">String</span><span style="color: var(--shiki-token-keyword)">!</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span><span style="color: var(--shiki-token-keyword)">type</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">insertDataResponse</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> success: </span><span style="color: var(--shiki-token-constant)">Boolean</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span><span style="color: var(--shiki-token-keyword)">extend</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">type</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">Mutation</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> insertData(input: </span><span style="color: var(--shiki-token-constant)">insertDataInput</span><span style="color: var(--shiki-token-keyword)">!</span><span style="color: var(--shiki-color-text)">): </span><span style="color: var(--shiki-token-constant)">insertDataResponse</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
TailorDB Example
To execute the function, you need to set up the Episode table in TailorDB.
<span><span style="color: var(--shiki-color-text)">resource </span><span style="color: var(--shiki-token-string-expression)">"tailor_tailordb"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"galaxy"</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> workspace_id </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">tailor_workspace</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">starwars</span><span style="color: var(--shiki-color-text)">.id</span></span>
<span><span style="color: var(--shiki-color-text)"> namespace </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"galaxy"</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">resource </span><span style="color: var(--shiki-token-string-expression)">"tailor_tailordb_type"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"episode"</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> workspace_id </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">tailor_workspace</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">starwars</span><span style="color: var(--shiki-color-text)">.id</span></span>
<span><span style="color: var(--shiki-color-text)"> namespace </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">tailor_tailordb</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">galaxy</span><span style="color: var(--shiki-color-text)">.namespace</span></span>
<span><span style="color: var(--shiki-color-text)"> name </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Episode"</span></span>
<span><span style="color: var(--shiki-color-text)"> description </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Episode data schema"</span></span>
<span><span style="color: var(--shiki-color-text)"> </span></span>
<span><span style="color: var(--shiki-color-text)"> fields </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> title </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> type </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"string"</span></span>
<span><span style="color: var(--shiki-color-text)"> description </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Title of the episode"</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> type_permission </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">local</span><span style="color: var(--shiki-color-text)">.permission_everyone</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-comment)">// you can update here per your requirement</span></span>
<span><span style="color: var(--shiki-color-text)"> locals {</span></span>
<span><span style="color: var(--shiki-color-text)"> permission_everyone </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> create </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> [</span></span>
<span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> attribute </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"everyone"</span></span>
<span><span style="color: var(--shiki-color-text)"> permit </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"allow"</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> ]</span></span>
<span><span style="color: var(--shiki-color-text)"> read </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> [</span></span>
<span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> attribute </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"everyone"</span></span>
<span><span style="color: var(--shiki-color-text)"> permit </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"allow"</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> ]</span></span>
<span><span style="color: var(--shiki-color-text)"> update </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> [</span></span>
<span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> attribute </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"everyone"</span></span>
<span><span style="color: var(--shiki-color-text)"> permit </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"allow"</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> ]</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">delete</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> [</span></span>
<span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> attribute </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"everyone"</span></span>
<span><span style="color: var(--shiki-color-text)"> permit </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"allow"</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> ]</span></span>
<span><span style="color: var(--shiki-color-text)"> admin </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> [</span></span>
<span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)"> attribute </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"everyone"</span></span>
<span><span style="color: var(--shiki-color-text)"> permit </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"allow"</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> ]</span></span>
<span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>
Deployment
Let's deploy the function to Tailor Platform.
<span><span style="color: var(--shiki-token-function)">terraform</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">apply</span></span>
<span></span>
Supported SQL queries
Strictly speaking, the SQL statements here are executed via a proxy to Tailor DB.
The SQL that can be issued is a subset of PostgreSQL, so the fundamental syntax follows PostgreSQL conventions.
SELECT
Retrieve specific columns
<span><span style="color: var(--shiki-token-keyword)">SELECT</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"id"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Retrieve all columns
<span><span style="color: var(--shiki-token-keyword)">SELECT</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Join tables
Only records where the user has Read
permission for all joined records are returned.
Self-joins (joining the same table multiple times) are not supported.
<span><span style="color: var(--shiki-token-keyword)">SELECT</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">JOIN</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Species"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">ON</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-string-expression)">"speciesID"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Species"</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-string-expression)">"id"</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Filter by condition
For specific supported operators, see condition
in Syntax section.
<span><span style="color: var(--shiki-token-keyword)">SELECT</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">WHERE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'Alice'</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Sort by column
As in PostgreSQL, when the order is omitted, the default is ASC
.
NULLS
cannot be specified, so null values are always treated as greater than non-null values.
<span><span style="color: var(--shiki-token-keyword)">SELECT</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">ORDER BY</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">DESC</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Limit and offset the results
<span><span style="color: var(--shiki-token-keyword)">SELECT</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">LIMIT</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">1</span><span style="color: var(--shiki-color-text)"> OFFSET </span><span style="color: var(--shiki-token-constant)">1</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Lock rows
<span><span style="color: var(--shiki-token-keyword)">SELECT</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FOR</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">UPDATE</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
INSERT
Insert a single row
As in TailorDB
, if no value is specified for id
, a new UUID is automatically generated.
<span><span style="color: var(--shiki-token-keyword)">INSERT INTO</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Starship"</span><span style="color: var(--shiki-color-text)"> (</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-comment)">-- String (text)</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"crew"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-comment)">-- Int (int4)</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"length"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-comment)">-- Float (float8)</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"isArmed"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-comment)">-- Bool (bool)</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"status"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-comment)">-- Enum (text)</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"serialNumber"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-comment)">-- UUID (uuid)</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"manufactureDate"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-comment)">-- Date (date)</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"maintenanceTime"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-comment)">-- Time (time)</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"lastLaunchDateTime"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-comment)">-- DateTime (timestamptz)</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"hyperdriveRating"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-comment)">-- Nested (jsonb)</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"manufacturers"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-comment)">-- String Array (_text)</span></span>
<span><span style="color: var(--shiki-color-text)">) </span><span style="color: var(--shiki-token-keyword)">VALUES</span><span style="color: var(--shiki-color-text)"> (</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'Millennium Falcon'</span><span style="color: var(--shiki-color-text)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">4</span><span style="color: var(--shiki-color-text)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">34</span><span style="color: var(--shiki-color-text)">.</span><span style="color: var(--shiki-token-constant)">75</span><span style="color: var(--shiki-color-text)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> TRUE,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'ACTIVE'</span><span style="color: var(--shiki-color-text)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'a845e77f-2bce-462a-9e25-8d9296c3545b'</span><span style="color: var(--shiki-color-text)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'1977-05-25'</span><span style="color: var(--shiki-color-text)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'22:00'</span><span style="color: var(--shiki-color-text)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'2019-12-20T00:00:00Z'</span><span style="color: var(--shiki-color-text)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'{"main": 0.5, "backup": 10.0}'</span><span style="color: var(--shiki-color-text)">,</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">ARRAY</span><span style="color: var(--shiki-color-text)">['Corellian Engineering Corporation']</span></span>
<span><span style="color: var(--shiki-color-text)">);</span></span>
<span></span>
Insert multiple rows
<span><span style="color: var(--shiki-token-keyword)">INSERT INTO</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)">) </span><span style="color: var(--shiki-token-keyword)">VALUES</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-string-expression)">'Alice'</span><span style="color: var(--shiki-color-text)">), (</span><span style="color: var(--shiki-token-string-expression)">'Bob'</span><span style="color: var(--shiki-color-text)">);</span></span>
<span></span>
Upsert
The conflict target (e.g., id
in the example below) can only contain a single column.
Specify either id
or a column with Unique=true
.
<span><span style="color: var(--shiki-token-keyword)">INSERT INTO</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-string-expression)">"id"</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)">) </span><span style="color: var(--shiki-token-keyword)">VALUES</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-string-expression)">'a845e77f-2bce-462a-9e25-8d9296c3545b'</span><span style="color: var(--shiki-color-text)">, </span><span style="color: var(--shiki-token-string-expression)">'Alice'</span><span style="color: var(--shiki-color-text)">) </span><span style="color: var(--shiki-token-keyword)">ON</span><span style="color: var(--shiki-color-text)"> CONFLICT (</span><span style="color: var(--shiki-token-string-expression)">"id"</span><span style="color: var(--shiki-color-text)">) DO </span><span style="color: var(--shiki-token-keyword)">UPDATE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">SET</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> EXCLUDED.</span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Return the inserted row
<span><span style="color: var(--shiki-token-keyword)">INSERT INTO</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)">) </span><span style="color: var(--shiki-token-keyword)">VALUES</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-string-expression)">'Alice'</span><span style="color: var(--shiki-color-text)">) RETURNING </span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
UPDATE
Update specific columns
<span><span style="color: var(--shiki-token-keyword)">UPDATE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">SET</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'Alice'</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">WHERE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"id"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'a845e77f-2bce-462a-9e25-8d9296c3545b'</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Return the updated row
<span><span style="color: var(--shiki-token-keyword)">UPDATE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">SET</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'Alice'</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">WHERE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"id"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'a845e77f-2bce-462a-9e25-8d9296c3545b'</span><span style="color: var(--shiki-color-text)"> RETURNING </span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
DELETE
Delete rows
<span><span style="color: var(--shiki-token-keyword)">DELETE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">WHERE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"id"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'a845e77f-2bce-462a-9e25-8d9296c3545b'</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Return the deleted row
<span><span style="color: var(--shiki-token-keyword)">DELETE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">WHERE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"id"</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">'a845e77f-2bce-462a-9e25-8d9296c3545b'</span><span style="color: var(--shiki-color-text)"> RETURNING </span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Transaction
Insert multiple rows in a transaction
<span><span style="color: var(--shiki-token-keyword)">BEGIN</span><span style="color: var(--shiki-color-text)">;</span></span>
<span><span style="color: var(--shiki-token-keyword)">INSERT INTO</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)">) </span><span style="color: var(--shiki-token-keyword)">VALUES</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-string-expression)">'Alice'</span><span style="color: var(--shiki-color-text)">);</span></span>
<span><span style="color: var(--shiki-token-keyword)">INSERT INTO</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Character"</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-string-expression)">"name"</span><span style="color: var(--shiki-color-text)">) </span><span style="color: var(--shiki-token-keyword)">VALUES</span><span style="color: var(--shiki-color-text)"> (</span><span style="color: var(--shiki-token-string-expression)">'Bob'</span><span style="color: var(--shiki-color-text)">);</span></span>
<span><span style="color: var(--shiki-token-keyword)">COMMIT</span><span style="color: var(--shiki-color-text)">;</span></span>
<span></span>
Syntax
<span><span style="color: var(--shiki-token-keyword)">statement</span><span style="color: var(--shiki-color-text)"> ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">select</span></span>
<span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">insert</span></span>
<span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">update</span></span>
<span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">delete</span></span>
<span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">begin</span></span>
<span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">commit</span></span>
<span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">rollback</span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">select</span><span style="color: var(--shiki-color-text)"> ::</span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">SELECT</span><span style="color: var(--shiki-color-text)"> select_item [, ...]</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> table_name</span></span>
<span><span style="color: var(--shiki-color-text)"> [ join [...] ]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ WHERE condition ]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ ORDER BY qualified_column_name [ ASC | DESC ] [, ...] ]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ LIMIT int_value ]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ OFFSET int_value ]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ FOR { UPDATE | SHARE } [...] ]</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">select_item ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> qualified_column_name [ AS alias ]</span></span>
<span><span style="color: var(--shiki-color-text)"> | [ table_name . ] </span><span style="color: var(--shiki-token-keyword)">*</span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">join</span><span style="color: var(--shiki-color-text)"> ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> [ INNER | { LEFT | RIGHT | FULL } [ OUTER ] ] </span><span style="color: var(--shiki-token-keyword)">JOIN</span><span style="color: var(--shiki-color-text)"> table_name </span><span style="color: var(--shiki-token-keyword)">ON</span><span style="color: var(--shiki-color-text)"> condition</span></span>
<span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">CROSS JOIN</span><span style="color: var(--shiki-color-text)"> table_name</span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">insert</span><span style="color: var(--shiki-color-text)"> ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">INSERT INTO</span><span style="color: var(--shiki-color-text)"> table_name ( column_name [, ...] )</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">VALUES</span><span style="color: var(--shiki-color-text)"> ( column_value [, ...] ) [, ...]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ ON CONFLICT ( column_name ) conflict_action ]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ RETURNING select_item [, ...] ]</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">conflict_action ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> DO NOTHING</span></span>
<span><span style="color: var(--shiki-color-text)"> | DO </span><span style="color: var(--shiki-token-keyword)">UPDATE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">SET</span><span style="color: var(--shiki-color-text)"> column_name </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> { column_value | EXCLUDED . column_name } [, ...]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ WHERE condition ] </span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">update</span><span style="color: var(--shiki-color-text)"> ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">UPDATE</span><span style="color: var(--shiki-color-text)"> table_name</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">SET</span><span style="color: var(--shiki-color-text)"> column_name </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> column_value [, ...]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ WHERE condition ]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ RETURNING select_item [, ...] ]</span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">delete</span><span style="color: var(--shiki-color-text)"> ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">DELETE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">FROM</span><span style="color: var(--shiki-color-text)"> table_name</span></span>
<span><span style="color: var(--shiki-color-text)"> [ WHERE condition ]</span></span>
<span><span style="color: var(--shiki-color-text)"> [ RETURNING select_item [, ...] ]</span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">begin</span><span style="color: var(--shiki-color-text)"> ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> { </span><span style="color: var(--shiki-token-keyword)">BEGIN</span><span style="color: var(--shiki-color-text)"> [ WORK | TRANSACTION ] | </span><span style="color: var(--shiki-token-keyword)">START TRANSACTION</span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> [ transaction_mode [, ...] ]</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">transaction_mode ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">ISOLATION</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">LEVEL</span><span style="color: var(--shiki-color-text)"> { </span><span style="color: var(--shiki-token-keyword)">SERIALIZABLE</span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">REPEATABLE</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">READ</span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">READ</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">COMMITTED</span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">READ</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">UNCOMMITTED</span><span style="color: var(--shiki-color-text)"> }</span></span>
<span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">READ</span><span style="color: var(--shiki-color-text)"> WRITE | </span><span style="color: var(--shiki-token-keyword)">READ</span><span style="color: var(--shiki-color-text)"> ONLY</span></span>
<span><span style="color: var(--shiki-color-text)"> | [ NOT ] DEFERRABLE</span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">commit</span><span style="color: var(--shiki-color-text)"> ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">COMMIT</span><span style="color: var(--shiki-color-text)"> [ WORK | TRANSACTION ]</span></span>
<span></span>
<span><span style="color: var(--shiki-token-keyword)">rollback</span><span style="color: var(--shiki-color-text)"> ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">ROLLBACK</span><span style="color: var(--shiki-color-text)"> [ WORK | TRANSACTION ]</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">condition ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> qualified_column_name binary_operator column_name_or_value</span></span>
<span><span style="color: var(--shiki-color-text)"> | qualified_column_name [ NOT ] </span><span style="color: var(--shiki-token-keyword)">IN</span><span style="color: var(--shiki-color-text)"> ( column_name_or_value [, ...] )</span></span>
<span><span style="color: var(--shiki-color-text)"> | qualified_column_name [ NOT ] </span><span style="color: var(--shiki-token-keyword)">BETWEEN</span><span style="color: var(--shiki-color-text)"> column_name_or_value </span><span style="color: var(--shiki-token-keyword)">AND</span><span style="color: var(--shiki-color-text)"> column_name_or_value</span></span>
<span><span style="color: var(--shiki-color-text)"> | condition </span><span style="color: var(--shiki-token-keyword)">IS</span><span style="color: var(--shiki-color-text)"> [ NOT ] </span><span style="color: var(--shiki-token-keyword)">NULL</span></span>
<span><span style="color: var(--shiki-color-text)"> | condition { </span><span style="color: var(--shiki-token-keyword)">AND</span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">OR</span><span style="color: var(--shiki-color-text)"> } condition</span></span>
<span><span style="color: var(--shiki-color-text)"> | ( condition )</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">binary_operator ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)"><></span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)"><</span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)"><=</span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">></span><span style="color: var(--shiki-color-text)"> | </span><span style="color: var(--shiki-token-keyword)">>=</span></span>
<span><span style="color: var(--shiki-color-text)"> | ~~ | !~~ | ~~</span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)"> | !~~</span><span style="color: var(--shiki-token-keyword)">*</span></span>
<span><span style="color: var(--shiki-color-text)"> | ~ | !~ | ~</span><span style="color: var(--shiki-token-keyword)">*</span><span style="color: var(--shiki-color-text)"> | !~</span><span style="color: var(--shiki-token-keyword)">*</span></span>
<span><span style="color: var(--shiki-color-text)"> | [ NOT ] </span><span style="color: var(--shiki-token-keyword)">LIKE</span><span style="color: var(--shiki-color-text)"> | [ NOT ] ILIKE</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">column_name_or_value ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> qualified_column_name</span></span>
<span><span style="color: var(--shiki-color-text)"> | column_value</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">qualified_column_name ::</span><span style="color: var(--shiki-token-keyword)">=</span></span>
<span><span style="color: var(--shiki-color-text)"> [ table_name . ] column_name</span></span>
<span></span>