PageSourceSearch

https://litdb.dev/postgres

html litdb.dev collected 2026-10-08 05:41:56 UTC 34,828 bytes, 498 lines download raw bytes

1<!doctype html>
2<html lang="en">
3<head>
4    <meta charset="utf-8"/>
5    <meta name="viewport" content="width=device-width, initial-scale=1">
6    <link rel="icon" type="image/png" href="/img/favicon.png">
7    <title>litdb for postgres.js</title>
8    
8<script>
9    if (location.search === "?dark") localStorage.setItem('color-scheme','dark') 
10    if (location.search === "?light") localStorage.removeItem('color-scheme') 
11    const cls = document.querySelector('html').classList
12    if (localStorage.getItem('color-scheme') === 'dark')
13        cls.add('dark')
14    else
15        cls.remove('dark')
16    </script>
16
17    <link rel="stylesheet" href="/css/app.css">
18    
18<script type="importmap">
19{
20    "imports": {
21        "app.mjs": "/mjs/app.mjs",
22        "vue": "/lib/mjs/vue.min.mjs",
23        "@servicestack/client": "/lib/mjs/servicestack-client.min.mjs",
24        "@servicestack/vue": "/lib/mjs/servicestack-vue.min.mjs",
25        "litdb": "/lib/mjs/litdb.min.js"
26    }
27}
28</script>
28
29</head>
30<body class="bg-white dark:bg-black dark:text-white">
31<header id="header" class="top-0 fixed z-50 h-14 bg-white dark:bg-black opacity-90 w-full shadow">
32  <nav class="border-b border-gray-200 dark:border-gray-700 bg-white dark:bg-black">
33    <div class="mx-auto max-w-[100rem] pr-4 sm:pr-6 lg:pr-8">
34      <div class="flex h-16 justify-between">
35        <div class="flex">
36          <div class="flex flex-shrink-0 items-center">
37            <a class="mr-2 lg:mr-8 flex items-center" href="/">
38                <img class="w-8 h-8 mr-1 ml-2 rounded-full" src="/img/logo.png" alt="litdb logo">
39                <span class="hidden sm:block text-2xl font-semibold">litdb</span>
40            </a>
41          </div>
42            <div class="hidden sm:-my-px sm:ml-6 sm:flex sm:space-x-4 lg:space-x-8">
43                <!-- Current: "border-indigo-500 text-gray-900", Default: "border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700" -->
44                        <a href="/overview" class="inline-flex items-center border-b-2 px-1 pt-1 text-sm font-medium border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:hover:text-gray-200">
45                            Documentation
46                        </a>
47                        <a href="https://github.com/litdb/litdb/discussions" class="inline-flex items-center border-b-2 px-1 pt-1 text-sm font-medium border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:hover:text-gray-200">
48                            Discuss
49                        </a>
50                        <a href="https://github.com/litdb/litdb" class="inline-flex items-center border-b-2 px-1 pt-1 text-sm font-medium border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:hover:text-gray-200">
51                            <span class='mr-1 text-xl'>&star;</span> GitHub
52                        </a>
53            </div>
54        </div>
55        <div class="hidden sm:ml-6 sm:flex sm:items-center">
56            <dark-mode-toggle class="ml-2 w-10"></dark-mode-toggle>
57        </div>
58        <div class="-mr-2 flex items-center sm:hidden">
59          <!-- Mobile menu button -->
60          <button type="button" v-on:click="open=!open" class="inline-flex items-center justify-center rounded-md bg-white dark:bg-black p-2 text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:ring-offset-black" aria-controls="mobile-menu" aria-expanded="false">
61            <span class="sr-only">Open main menu</span>
62            <!-- Menu open: "hidden", Menu closed: "block" -->
63            <svg :class="['h-6 w-6', open ? 'hidden' : 'block']" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
64              <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" />
65            </svg>
66            <!-- Menu open: "block", Menu closed: "hidden" -->
67            <svg :class="['h-6 w-6', open ? 'block' : 'hidden']" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
68              <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
69            </svg>
70          </button>
71        </div>
72      </div>
73    </div>
74
75    <!-- Mobile menu, show/hide based on menu state. -->
76    <div v-cloak v-if="open" class="sm:hidden">
77        <div class="space-y-1 pb-3 pt-2">
78            <!-- Current: "border-indigo-500 bg-indigo-50 text-indigo-700", Default: "border-transparent text-gray-600 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-800" -->
79                    <a href="/overview" class="block border-l-4 py-2 pl-3 pr-4 text-base font-medium border-transparent text-gray-600 dark:text-gray-300 hover:border-gray-300 hover:bg-gray-50 dark:hover:bg-gray-900 hover:text-gray-800 dark:hover:text-gray-100">
80                        Documentation
81                    </a>
82                    <a href="https://github.com/litdb/litdb/discussions" class="block border-l-4 py-2 pl-3 pr-4 text-base font-medium border-transparent text-gray-600 dark:text-gray-300 hover:border-gray-300 hover:bg-gray-50 dark:hover:bg-gray-900 hover:text-gray-800 dark:hover:text-gray-100">
83                        Discuss
84                    </a>
85                    <a href="https://github.com/litdb/litdb" class="block border-l-4 py-2 pl-3 pr-4 text-base font-medium border-transparent text-gray-600 dark:text-gray-300 hover:border-gray-300 hover:bg-gray-50 dark:hover:bg-gray-900 hover:text-gray-800 dark:hover:text-gray-100">
86                        <span class='mr-1 text-xl'>&star;</span> GitHub
87                    </a>
88        </div>
89    </div>
90  </nav>
91</header>
92
93<script type="module">
94import { ref } from "vue"
95import { mount } from "app.mjs"
96
97const Header = {
98    setup() {
99        const open = ref(false)
100        return { open }
101    }
102}
103mount('#header', Header)
104</script>
104
105
106
107<div class="min-h-screen">
108    <main role="main" class="pt-16 pb-3">
109        
110
111
112
113<style>
114.active {
115    color: #0ea5e9 !important;
116}
117</style>
118<link rel="stylesheet" href="/css/highlight.css">
119<link rel="stylesheet" href="/css/typography.css">
120<link rel="stylesheet" href="/css/lite-yt-embed.css">
121
122<div class="w-full max-w-[100rem] mx-auto">
123    <div class="flex flex-wrap">
124        <div id="sidebar" class="z-40 inset-0 flex-none bg-white dark:bg-black lg:w-64 xl:w-80">
125            <button v-cloak v-on:click="open=true" :class="['text-gray-400 hover:text-gray-500 pt-4 pl-2 absolute transform transition-all duration-200', open ? 'opacity-0 translate-x-56' : 'opacity-100']" title="Open Sidebar">
126                <svg class="w-6 h-6" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 12H10m10 0l-4 4m4-4l-4-4M4 4v16"/></svg>
127            </button>
128            <div :class="['fixed bg-white dark:bg-black h-screen overflow-y-auto scrolling-touch overflow-hidden shadow lg:shadow-none transform transition-transform duration-200', open ? '' : 'translate-x-[-100%]']">
129                <nav class="sidebar lg:w-64 xl:w-80 px-1 pt-6 pb-16 overflow-y-auto font-medium text-sm lg:text-base sm:px-3 xl:px-5" aria-label="Sidebar">
130                    <close-button title="Close Sidebar" class="lg:hidden -mr-2" v-on:close="open=false"></close-button>
131                                <a href="/" class="block flex items-center whitespace-nowrap">
132<svg class='h-6 w-6 shrink-0 text-sky-500' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='currentColor' aria-hidden='true'><path stroke-linecap='round' stroke-linejoin='round' d='M2.25 12l8.954-8.955c.44-.439 1.152-.439 1.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25'></path></svg>                                    <span class="p-2 pl-3 font-display font-medium text-slate-900 dark:text-white">
133Home                                    </span>
134                                </a>
135                        <ul role="list" class="mb-6 mt-2 ml-3 space-y-2 border-l-2 border-slate-100 dark:border-slate-800 lg:mt-4 lg:space-y-4 lg:border-slate-200">
136                                <li class="relative">
137                                    <a href="/overview" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
138                                        Overview
139                                    </a>
140                                </li>
141                                <li class="relative">
142                                    <a href="/install" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
143                                        Install
144                                    </a>
145                                </li>
146                                <li class="relative">
147                                    <a href="/models" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
148                                        Models
149                                    </a>
150                                </li>
151                                <li class="relative">
152                                    <a href="/customize" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
153                                        Customize
154                                    </a>
155                                </li>
156                                <li class="relative">
157                                    <a href="/bug-report" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
158                                        Report Issue
159                                    </a>
160                                </li>
161                        </ul>
162                                <h2 class="font-display font-medium text-slate-900 dark:text-white whitespace-nowrap">
163                                    Drivers
164                                </h2>
165                        <ul role="list" class="mb-6 mt-2 ml-3 space-y-2 border-l-2 border-slate-100 dar
165k:border-slate-800 lg:mt-4 lg:space-y-4 lg:border-slate-200">
166                                <li class="relative">
167                                    <a href="/bun-sqlite" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
168                                        SQLite (Bun)
169                                    </a>
170                                </li>
171                                <li class="relative">
172                                    <a href="/better-sqlite" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
173                                        SQLite (Node.js)
174                                    </a>
175                                </li>
176                                <li class="relative">
177                                    <a href="/postgres" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full active font-semibold text-sky-500 before:bg-sky-500">
178                                        PostgreSQL
179                                    </a>
180                                </li>
181                                <li class="relative">
182                                    <a href="/mysql2" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
183                                        MySQL
184                                    </a>
185                                </li>
186                        </ul>
187                                <h2 class="font-display font-medium text-slate-900 dark:text-white whitespace-nowrap">
188                                    Queries
189                                </h2>
190                        <ul role="list" class="mb-6 mt-2 ml-3 space-y-2 border-l-2 border-slate-100 dark:border-slate-800 lg:mt-4 lg:space-y-4 lg:border-slate-200">
191                                <li class="relative">
192                                    <a href="/schema" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
193                                        Schema
194                                    </a>
195                                </li>
196                                <li class="relative">
197                                    <a href="/select" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
198                                        Select
199                                    </a>
200                                </li>
201                                <li class="relative">
202                                    <a href="/joins" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
203                                        Joins
204                                    </a>
205                                </li>
206                                <li class="relative">
207                                    <a href="/where" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
208                                        Where
209                                    </a>
210                                </li>
211                                <li class="relative">
212                                    <a href="/group-by" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
213                                        Group By
214                                    </a>
215                                </li>
216                                <li class="relative">
217                                    <a href="/having" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
218                                        Having
219                                    </a>
220                                </li>
221                                <li class="relative">
222                                    <a href="/order-by" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
223                                        Order By
224                                    </a>
225                                </li>
226                                <li class="relative">
227                                    <a href="/insert" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
228                                        Insert
229                                    </a>
230                                </li>
231                                <li class="relative">
232                                    <a href="/update" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
233                                        Update
234                                    </a>
235                                </li>
236                                <li class="relative">
237                                    <a href="/delete" class="block w-full pl-3.5 before:pointer-events-none before:absolute before:-left-1 before:top-1/2 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300">
238                                        Delete
239                                    </a>
240                                </li>
241                        </ul>
242                </nav>
243            </div>
244        </div>
245        <div id="doc" class="mx-auto flex">
246            <div class="mt-8 mx-auto prose lg:prose-lg">
247                
248                    <section class="not-prose mb-16 md:mb-12">
249                        <h1 class="text-4xl tracking-tight font-extrabold text-gray-900 dark:text-gray-50 sm:text-5xl md:text-6xl">
250                            litdb for postgres.js
251                        </h1>
252                    </section>
253
254                <div class="not-prose"></div>
255
256                <div class="content">
257                    <p>Use litdb with <a href="https://github.com/porsager/postgres">postgres.js</a> driver:</p>
258<div class="not-prose sh-copy cp flex cursor-pointer mb-3" onclick="copy(this)">
259                <div class="flex-grow bg-gray-800">
260                    <div class="pl-4 py-1 pb-1.5 align-middle whitespace-pre text-base text-gray-100"><p>npm install @litdb/postgres</p>
261</div>
262                    </div>
263                <div class="flex">
264                    <div class="bg-green-600 text-white p-1.5 pb-0">
265                        <svg class="copied w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg>
266                        <svg class="nocopy w-6 h-6" title="copy" fill='none' stroke='white' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
267                            <path stroke-linecap='round' stroke-linejoin='round' stroke-width='1' d='M8 7v8a2 2 0 002 2h6M8 7V5a2 2 0 012-2h4.586a1 1 0 01.707.293l4.414 4.414a1 1 0 01.293.707V15a2 2 0 01-2 2h-2M8 7H6a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2v-2'></path>
268                        </svg>
269                    </div>
270                </div>
271            </div>
272<h2 id="configuration">Configuration<a class="header-anchor" href="javascript:;" onclick="location.hash='#configuration'" aria-label="Permalink">&ZeroWidthSpace;</a></h2>
273<p><strong>db.ts</strong></p>
274<pre><code class="language-ts">import { connect } from &quot;@litdb/postgres&quot;
275
276export const connection = connect({ hostname, database, user, password })
277export const { $, async:db, native:sql } = connection
278</code></pre>
279<div class="tip custom-block">
280            <p class="custom-block-title">TIP</p><p>When needed use <code>sql</code> to access the native <a href="https://github.com/porsager/postgres#usage">
280postgres.js sql function</a></p>
281</div>
282<h3 id="configuration-options">Configuration Options<a class="header-anchor" href="javascript:;" onclick="location.hash='#configuration-options'" aria-label="Permalink">&ZeroWidthSpace;</a></h3>
283<pre><code class="language-ts">type ConnectionOptions = {
284    /** Postgres ip address[s] or domain name[s] */
285    host?: string | undefined;
286    /** Postgres server[s] port[s] */
287    port?: number | undefined;
288    /** unix socket path (usually '/tmp') */
289    path?: string | undefined;
290    /** Password of database user (an alias for `password`) */
291    pass?: Options&lt;T&gt;['password'] | undefined;
292    /**
293     * Password of database user
294     * @default process.env['PGPASSWORD']
295     */
296    password?: string | (() =&gt; string | Promise&lt;string&gt;) | undefined;
297    /** Name of database to connect to (an alias for `database`) */
298    db?: Options&lt;T&gt;['database'] | undefined;
299    /** Username of database user (an alias for `user`) */
300    username?: Options&lt;T&gt;['user'] | undefined;
301    /** Postgres ip address or domain name (an alias for `host`) */
302    hostname?: Options&lt;T&gt;['host'] | undefined;
303    /**
304     * Disable prepared mode
305     * @deprecated use &quot;prepare&quot; option instead
306     */
307    no_prepare?: boolean | undefined;
308    /**
309     * Idle connection timeout in seconds
310     * @deprecated use &quot;idle_timeout&quot; option instead
311     */
312    timeout?: Options&lt;T&gt;['idle_timeout'] | undefined;
313}
314</code></pre>
315<p>See <a href="https://github.com/porsager/postgres?tab=readme-ov-file#connection-details">postgres.js Connection Options</a> for more.</p>
316<p>Example:</p>
317<pre><code class="language-ts">connection = connect({ hostname, database, user, password })
318connection = connect(connectionString, options)
319</code></pre>
320<h2 id="usage">Usage<a class="header-anchor" href="javascript:;" onclick="location.hash='#usage'" aria-label="Permalink">&ZeroWidthSpace;</a></h2>
321<p>Example of using <code>@litdb/postgres</code> async APIs:</p>
322<pre><code class="language-ts">import { $, db } from &quot;./db&quot;
323import { Contact } from &quot;./models&quot;
324
325await db.dropTable(Contact)
326await db.createTable(Contact)
327await db.insertAll([
328    new Contact({ name:&quot;John Doe&quot;, email:&quot;<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7913161117391418101557160b1e">[email&#160;protected]</a>&quot; }),
329    new Contact({ name:&quot;Jane Doe&quot;, email:&quot;<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7f151e111a3f121e161351100d18">[email&#160;protected]</a>&quot; }),
330])
331
332const janeEmail = '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8fe5eee1eacfe2eee6e3a1e0fde8">[email&#160;protected]</a>'
333const jane = await db.one&lt;Contact&gt;($.from(Contact).where(c =&gt; $`${c.email}=${janeEmail}`))
334
335// Insert examples
336const { lastInsertRowid:bobId } = await db.insert(
337    new Contact({ name:&quot;Bob&quot;, email:&quot;<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="67050805270a060e0b49081500">[email&#160;protected]</a>&quot;}))
338
339const { lastInsertRowid } = await db.exec
340    `INSERT INTO Contact(name,email) VALUES('Jo','<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8fe5e0cfebe0eaa1e0fde8">[email&#160;protected]</a>')`
341
342const name = 'Alice', email = '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fa9b9693999fba979b9396d495889d">[email&#160;protected]</a>'
343await db.exec`INSERT INTO Contact(name,email) VALUES (${name}, ${email})`
344
345// Typed SQL fragment with named param example
346const hasId = &lt;Table extends { id:number }&gt;(id:number|bigint) =&gt;
347    (x:Table) =&gt; $.sql($`${x.id} = $id`, { id })
348
349const contacts = await db.all($.from(Contact).into(Contact))                // =&gt; Contact[]
350const bob = await db.one($.from(Contact).where(hasId(bobId)).into(Contact)) // =&gt; Contact
351const contactsCount = await db.value($.from(Contact).rowCount())            // =&gt; number
352const emails = await db.column($.from(Contact).select(c =&gt; $`${c.email}`))  // =&gt; string[]
353const contactsArray = await db.arrays($.from(Contact))                      // =&gt; any[][]
354const bobArray = await db.array($.from(Contact).where(hasId(bobId)))        // =&gt; any[]
355
356// Update examples
357jane.email = '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c9a3a8a7ac89ada6ace7a6bbae">[email&#160;protected]</a>'
358await db.update(jane)                           // Update all properties
359await db.update(jane, { onlyProps:['email'] })  // Update only email
360// query builder
361await db.exec($.update(Contact).set({ email:jane.email }).where(hasId(jane.id)))
362
363// Delete examples
364await db.delete(jane)
365await db.exec($.deleteFrom(Contact).where(hasId(jane.id))) // query builder
366</code></pre>
367
368                </div>
369
370                <div class="not-prose"></div>
371                
372                    <div class="not-prose py-8">
373                        <a class="text-slate-500 font-semibold hover:text-indigo-600 flex items-center" href="https://github.com/litdb/litdb.dev/blob/main/MyApp/_pages/postgres.md" target="_blank" rel="noopener noreferrer">
374                            Edit this page on GitHub<svg class="ml-1 inline-block w-4 h-4" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" data-v-1ed99556="">
374<path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg>
375                        </a>
376                    </div>
377
378                    <div class="not-prose my-20">
379                                <nav class="flex items-center justify-between border-t border-gray-200 dark:border-gray-700 px-4 sm:px-0">
380                                    <div class="-mt-px flex w-0 flex-1">
381                                            <a href="/better-sqlite" class="inline-flex items-center border-t-2 border-transparent pt-4 pr-1 text-sm font-medium text-gray-500 hover:border-gray-300 dark:hover:border-gray-600 hover:text-gray-700 dark:hover:text-gray-200">
382                                                <!-- Heroicon name: mini/arrow-long-left -->
383                                                <svg class="mr-3 h-5 w-5 text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
384                                                    <path fill-rule="evenodd" d="M18 10a.75.75 0 01-.75.75H4.66l2.1 1.95a.75.75 0 11-1.02 1.1l-3.5-3.25a.75.75 0 010-1.1l3.5-3.25a.75.75 0 111.02 1.1l-2.1 1.95h12.59A.75.75 0 0118 10z" clip-rule="evenodd"></path>
385                                                </svg>
386                                                SQLite (Node.js)
387                                            </a>
388                                    </div>
389                                    <div class="hidden md:-mt-px md:flex"></div>
390                                    <div class="-mt-px flex w-0 flex-1 justify-end">
391                                            <a href="/mysql2" class="inline-flex items-center border-t-2 border-transparent pt-4 pl-1 text-sm font-medium text-gray-500 hover:border-gray-300 dark:hover:border-gray-600 hover:text-gray-700 dark:hover:text-gray-200">
392                                                MySQL
393                                                <!-- Heroicon name: mini/arrow-long-right -->
394                                                <svg class="ml-3 h-5 w-5 text-gray-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
395                                                    <path fill-rule="evenodd" d="M2 10a.75.75 0 01.75-.75h12.59l-2.1-1.95a.75.75 0 111.02-1.1l3.5 3.25a.75.75 0 010 1.1l-3.5 3.25a.75.75 0 11-1.02-1.1l2.1-1.95H2.75A.75.75 0 012 10z" clip-rule="evenodd"></path>
396                                                </svg>
397                                            </a>
398                                    </div>
399                                </nav>
400                    </div>
401            </div>
402                
403                <div class="docmap hidden 2xl:block flex-none w-64 pl-8 mr-8">
404                    <div class="fixed bg-white dark:bg-black flex flex-col overflow-y-auto pt-10 px-8 pb-6" style="height:calc(100vh - 50px);">
405                        <div>
406                            <h5 class="text-slate-900 font-semibold mb-4 text-sm leading-6 dark:text-slate-100">
407                                On This Page
408                            </h5>
409                            <ul class="text-slate-700 text-sm leading-6">
410                                    <li class="group text-gray-800 hover:text-gray-900">
411                                        <span v-hash="'#configuration'" data-id="configuration" class="cursor-pointer font-medium block text-sm transform transition-colors duration-200 py-2">
412                                            Configuration
413                                        </span>
414                                            <ul class="ml-4">
415                                                    <li data-id="configuration-options" class="text-gray-500 hover:text-gray-900">
416                                                        <span v-hash="'#configuration-options'" class="cursor-pointer flex text-sm transform transition-colors duration-200 py-2">
417                                                            <svg width="3" height="24" viewBox="0 -9 3 24" class="mr-2 overflow-visible"><path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg>
418                                                            Configuration Options
419                                                        </span>
420                                                    </li>
421                                            </ul>
422                                    </li>
423                                    <li class="group text-gray-800 hover:text-gray-900">
424                                        <span v-hash="'#usage'" data-id="usage" class="cursor-pointer font-medium block text-sm transform transition-colors duration-200 py-2">
425                                            Usage
426                                        </span>
427                                    </li>
428                            </ul>
429                        </div>
430                    </div>
431                </div>
432                
433        </div>
434    </div>    
435</div>
436
437<link rel="stylesheet" href="/codemirror/lib/codemirror.css">
438<link rel="stylesheet" href="/codemirror/theme/mocha.css" />
vendor: 109 bytes, lines 438-439
438
439<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
439<script src="/codemirror/lib/codemirror.js"></script>
vendor: 1 bytes, line 439
439
440<script src="/codemirror/mode/javascript/javascript.js"></script>
vendor: 1 bytes, line 440
440
441<script src="/codemirror/addon/edit/matchbrackets.js"></script>
vendor: 1 bytes, line 441
441
442<script src="/codemirror/addon/selection/active-line.js"></script>
442
443
444
445<script>
446//doc instructions
447if (document.querySelector('.hide-title')) {
448    const el = document.querySelector('#doc section h1') 
449    if (el) el.style.display='none'
450}
451</script>
451
452
453<script type="module">
454import { ref } from "vue"
455import { mount } from "app.mjs"
456
457
458    const App = {
459        setup() {
460            function nav(url) {
461                window.open(url)
462            }
463            return { nav }
464        }
465    }
466    
467const Sidebar = {
468    setup() {
469        const open = ref(true)
470        return { open }
471    }
472}
473
474mount('#doc', App)
475mount('#sidebar', Sidebar)
476</script>
476
477
478<script src="/lib/js/highlight.js"></script>
vendor: 1 bytes, line 478
478
479<script>hljs.highlightAll()</script>
vendor: 1 bytes, line 479
479
480<script src="/lib/js/lite-yt-embed.js"></script>
vendor: 1 bytes, line 480
480
481<script src="/mjs/docs.mjs" type="module"></script>
481
482    
483
484    </main>
485</div>
486
487
488
489<script type="module">
490import { init } from "app.mjs"
491init()
492</script>
492
493
494
495
496<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"7e8f6dc0989e492b9da04c4710092d07","r":1,"spa":2}' crossorigin="anonymous"></script>
496
497</body>
498</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.