|
1 | 1 | # pg0 - Embedded PostgreSQL for Node.js |
2 | 2 |
|
3 | | -Zero-config PostgreSQL with pgvector support. Just `npm install` and go. |
| 3 | +[](https://www.npmjs.com/package/@vectorize-io/pg0) |
4 | 4 |
|
5 | | -## Installation |
| 5 | +Embedded PostgreSQL with pgvector. No installation, no Docker, no configuration. |
| 6 | + |
| 7 | +## Install |
6 | 8 |
|
7 | 9 | ```bash |
8 | 10 | npm install @vectorize-io/pg0 |
9 | 11 | ``` |
10 | 12 |
|
11 | | -## Quick Start |
| 13 | +## Usage |
12 | 14 |
|
13 | 15 | ```typescript |
14 | 16 | import { Pg0 } from "@vectorize-io/pg0"; |
15 | 17 |
|
16 | | -// Start PostgreSQL (auto-installs on first run) |
| 18 | +// Basic usage |
17 | 19 | const pg = new Pg0(); |
18 | 20 | await pg.start(); |
19 | | - |
20 | 21 | console.log(await pg.getUri()); // postgresql://postgres:postgres@localhost:5432/postgres |
21 | | - |
| 22 | +await pg.execute("CREATE EXTENSION IF NOT EXISTS vector"); |
22 | 23 | await pg.stop(); |
23 | | -``` |
24 | | - |
25 | | -## Synchronous API |
26 | | - |
27 | | -```typescript |
28 | | -import { Pg0 } from "@vectorize-io/pg0"; |
29 | | - |
30 | | -const pg = new Pg0(); |
31 | | -pg.startSync(); |
32 | | -console.log(pg.getUriSync()); |
33 | | -pg.stopSync(); |
34 | | -``` |
35 | | - |
36 | | -## Custom Configuration |
37 | | - |
38 | | -```typescript |
39 | | -import { Pg0 } from "@vectorize-io/pg0"; |
40 | 24 |
|
| 25 | +// Custom configuration |
41 | 26 | const pg = new Pg0({ |
| 27 | + name: "myapp", |
42 | 28 | port: 5433, |
43 | 29 | username: "myuser", |
44 | 30 | password: "mypass", |
45 | 31 | database: "mydb", |
46 | | - config: { |
47 | | - shared_buffers: "512MB", |
48 | | - maintenance_work_mem: "1GB", |
49 | | - }, |
| 32 | + config: { shared_buffers: "512MB" } |
50 | 33 | }); |
51 | | - |
52 | 34 | await pg.start(); |
53 | | -console.log(await pg.getUri()); |
54 | 35 | await pg.stop(); |
55 | | -``` |
56 | | - |
57 | | -## Multiple Instances |
58 | 36 |
|
59 | | -```typescript |
60 | | -import { Pg0, listInstances } from "@vectorize-io/pg0"; |
61 | | - |
62 | | -const app = new Pg0({ name: "app", port: 5432 }); |
63 | | -const test = new Pg0({ name: "test", port: 5433 }); |
64 | | - |
65 | | -await app.start(); |
66 | | -await test.start(); |
67 | | - |
68 | | -for (const instance of await listInstances()) { |
69 | | - console.log(`${instance.name}: ${instance.uri}`); |
70 | | -} |
71 | | - |
72 | | -await app.stop(); |
73 | | -await test.stop(); |
| 37 | +// Sync API also available |
| 38 | +pg.startSync(); |
| 39 | +pg.stopSync(); |
74 | 40 | ``` |
75 | 41 |
|
76 | | -## API Reference |
| 42 | +## API |
77 | 43 |
|
78 | 44 | ### Pg0 Class |
79 | 45 |
|
80 | | -```typescript |
81 | | -const pg = new Pg0({ |
82 | | - name: "default", // Instance name |
83 | | - port: 5432, // Port |
84 | | - username: "postgres", // Username |
85 | | - password: "postgres", // Password |
86 | | - database: "postgres", // Database |
87 | | - dataDir: undefined, // Custom data directory |
88 | | - config: {}, // PostgreSQL config options |
89 | | -}); |
90 | | - |
91 | | -// Async methods |
92 | | -await pg.start(); // Start PostgreSQL -> InstanceInfo |
93 | | -await pg.stop(); // Stop PostgreSQL |
94 | | -await pg.info(); // Get instance info -> InstanceInfo |
95 | | -await pg.getUri(); // Connection URI |
96 | | -await pg.isRunning(); // Is running |
97 | | -await pg.execute(sql); // Execute SQL -> string |
98 | | - |
99 | | -// Sync methods |
100 | | -pg.startSync(); |
101 | | -pg.stopSync(); |
102 | | -pg.infoSync(); |
103 | | -pg.getUriSync(); |
104 | | -pg.isRunningSync(); |
105 | | -pg.executeSync(sql); |
106 | | -``` |
| 46 | +| Method | Description | |
| 47 | +|--------|-------------| |
| 48 | +| `start()` / `startSync()` | Start PostgreSQL, returns `InstanceInfo` | |
| 49 | +| `stop()` / `stopSync()` | Stop PostgreSQL | |
| 50 | +| `drop()` / `dropSync()` | Stop and delete all data | |
| 51 | +| `info()` / `infoSync()` | Get instance info | |
| 52 | +| `execute(sql)` / `executeSync(sql)` | Run SQL query | |
| 53 | +| `getUri()` / `getUriSync()` | Get connection URI | |
| 54 | +| `isRunning()` / `isRunningSync()` | Check if running | |
107 | 55 |
|
108 | 56 | ### Module Functions |
109 | 57 |
|
110 | 58 | ```typescript |
111 | | -import { start, stop, info, listInstances, install } from "@vectorize-io/pg0"; |
112 | | - |
113 | | -// Async |
114 | | -await start({ port: 5432 }); // Start -> InstanceInfo |
115 | | -await stop("default"); // Stop |
116 | | -await info("default"); // Info -> InstanceInfo |
117 | | -await listInstances(); // List all -> InstanceInfo[] |
118 | | -await install(); // Install pg0 binary |
119 | | - |
120 | | -// Sync |
121 | | -startSync({ port: 5432 }); |
122 | | -stopSync("default"); |
123 | | -infoSync("default"); |
124 | | -listInstancesSync(); |
125 | | -installSync(); |
126 | | -``` |
| 59 | +import { start, stop, drop, info, listInstances } from "@vectorize-io/pg0"; |
127 | 60 |
|
128 | | -### InstanceInfo |
| 61 | +await start({ name: "default", port: 5432 }); // Start instance |
| 62 | +await stop("default"); // Stop instance |
| 63 | +await drop("default"); // Delete instance |
| 64 | +await info("default"); // Get instance info |
| 65 | +await listInstances(); // List all instances |
129 | 66 |
|
130 | | -```typescript |
131 | | -interface InstanceInfo { |
132 | | - name: string; |
133 | | - running: boolean; |
134 | | - pid?: number; |
135 | | - port?: number; |
136 | | - version?: string; |
137 | | - username?: string; |
138 | | - database?: string; |
139 | | - data_dir?: string; |
140 | | - uri?: string; |
141 | | -} |
| 67 | +// Sync versions: startSync, stopSync, dropSync, infoSync, listInstancesSync |
142 | 68 | ``` |
| 69 | + |
| 70 | +## Links |
| 71 | + |
| 72 | +- [GitHub](https://github.com/vectorize-io/pg0) |
| 73 | +- [CLI Documentation](https://github.com/vectorize-io/pg0#readme) |
0 commit comments