okengine 0.9.1 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/manifest.v1.schema.json +9 -1
- package/package.json +3 -3
- package/site/content/docs/console/runs.mdx +10 -0
- package/site/content/docs/console/traces.mdx +4 -0
- package/site/content/docs/elements/ai.mdx +54 -32
- package/site/content/docs/elements/channel.mdx +97 -9
- package/site/content/docs/elements/clock.mdx +1 -0
- package/site/content/docs/elements/flow.mdx +42 -8
- package/site/content/docs/get-started/basic-usage.mdx +5 -1
- package/site/content/docs/get-started/installation.mdx +9 -5
- package/site/content/docs/meta.json +2 -0
- package/site/content/docs/providers/azure-redis.mdx +85 -0
- package/site/content/docs/providers/cockroachdb.mdx +86 -0
- package/site/content/docs/providers/digitalocean-caching.mdx +88 -0
- package/site/content/docs/providers/dragonfly-cloud.mdx +82 -0
- package/site/content/docs/providers/elasticache.mdx +92 -0
- package/site/content/docs/providers/index.mdx +101 -0
- package/site/content/docs/providers/memorystore.mdx +89 -0
- package/site/content/docs/providers/meta.json +20 -0
- package/site/content/docs/providers/neon.mdx +115 -0
- package/site/content/docs/providers/redis-cloud.mdx +93 -0
- package/site/content/docs/providers/supabase.mdx +117 -0
- package/site/content/docs/providers/upstash.mdx +91 -0
- package/site/content/docs/providers/yugabytedb.mdx +95 -0
- package/site/content/docs/recipes/caddy.mdx +128 -0
- package/site/content/docs/recipes/cockroachdb.mdx +127 -0
- package/site/content/docs/recipes/dragonfly.mdx +125 -0
- package/site/content/docs/recipes/index.mdx +146 -0
- package/site/content/docs/recipes/llama-cpp.mdx +153 -0
- package/site/content/docs/recipes/mailpit.mdx +136 -0
- package/site/content/docs/recipes/meilisearch.mdx +139 -0
- package/site/content/docs/recipes/meta.json +31 -0
- package/site/content/docs/recipes/ollama.mdx +142 -0
- package/site/content/docs/recipes/openbao.mdx +141 -0
- package/site/content/docs/recipes/pgdog.mdx +137 -0
- package/site/content/docs/recipes/postgres.mdx +136 -0
- package/site/content/docs/recipes/redis.mdx +130 -0
- package/site/content/docs/recipes/rustfs.mdx +148 -0
- package/site/content/docs/recipes/sglang.mdx +105 -0
- package/site/content/docs/recipes/supabase-docker.mdx +145 -0
- package/site/content/docs/recipes/timescale.mdx +129 -0
- package/site/content/docs/recipes/traefik.mdx +136 -0
- package/site/content/docs/recipes/valkey.mdx +121 -0
- package/site/content/docs/recipes/vllm.mdx +106 -0
- package/site/content/docs/recipes/yugabytedb.mdx +135 -0
- package/site/content/docs/reference/cli.md +42 -6
- package/site/content/docs/reference/configuration.mdx +5 -3
- package/site/content/docs/reference/environment-variables.mdx +12 -12
- package/site/content/docs/reference/fx.mdx +38 -4
- package/src/cli/ai-setup/ai-setup.test.ts +32 -12
- package/src/cli/ai-setup/apply.ts +65 -23
- package/src/cli/ai-setup/catalog.ts +1316 -35
- package/src/cli/ai-setup/detect-ollama.ts +47 -0
- package/src/cli/ai-setup/index.ts +44 -7
- package/src/cli/ai-setup/prompts.ts +430 -486
- package/src/cli/ai-setup/recommend.test.ts +150 -50
- package/src/cli/ai-setup/recommend.ts +118 -101
- package/src/cli/ask-seed.test.ts +68 -0
- package/src/cli/ask-seed.ts +79 -0
- package/src/cli/db-seed-redact.test.ts +25 -0
- package/src/cli/db-seed.ts +36 -7
- package/src/cli/db.test.ts +1 -1
- package/src/cli/db.ts +2 -2
- package/src/cli/dev-app-runner.ts +6 -0
- package/src/cli/dev-controls.test.ts +107 -0
- package/src/cli/dev-controls.ts +354 -0
- package/src/cli/dev-schema-sync.ts +12 -4
- package/src/cli/dev.test.ts +50 -30
- package/src/cli/dev.ts +633 -66
- package/src/cli/docker-cli.test.ts +15 -0
- package/src/cli/drizzle-env.test.ts +40 -6
- package/src/cli/drizzle-env.ts +22 -1
- package/src/cli/ensure-drizzle-config.ts +6 -4
- package/src/cli/hero-meta.test.ts +13 -1
- package/src/cli/hero-meta.ts +28 -6
- package/src/cli/index.ts +5 -0
- package/src/cli/registry.ts +24 -0
- package/src/cli/replay.test.ts +105 -0
- package/src/cli/replay.ts +206 -0
- package/src/cli/start.ts +12 -1
- package/src/compiler/effects-infer.ts +37 -8
- package/src/compiler/extract.test.ts +125 -0
- package/src/compiler/extract.ts +31 -6
- package/src/config/index.ts +3 -3
- package/src/console/server/claim.ts +3 -1
- package/src/console/ui/dist/assets/{index-ClX0ZCe5.js → index-D-9KFce5.js} +2 -2
- package/src/console/ui/dist/assets/panel-overview-CW0CQEc2.js +1 -0
- package/src/console/ui/dist/assets/panel-runs-BxuyDI3x.js +1 -0
- package/src/console/ui/dist/assets/{panel-signals-Dsxdu_AR.js → panel-signals-BXofbj7v.js} +1 -1
- package/src/console/ui/dist/assets/{panel-store-hy7O8HOs.js → panel-store-B8mH-arU.js} +1 -1
- package/src/console/ui/dist/assets/{panel-traces-CBiAe5go.js → panel-traces-DSA-ZWnf.js} +1 -1
- package/src/console/ui/dist/index.html +1 -1
- package/src/console/ui/overview/slo.ts +31 -3
- package/src/console/ui/overview/types.ts +6 -0
- package/src/console/ui/runs/errors.test.ts +53 -0
- package/src/console/ui/runs/errors.ts +88 -0
- package/src/console/ui/runs/index.ts +8 -0
- package/src/console/ui/runs/search.ts +16 -0
- package/src/console/ui/shell/panels/runs/RunsPanel.tsx +72 -1
- package/src/docker/ai-model-status.test.ts +101 -0
- package/src/docker/ai-model-status.ts +276 -0
- package/src/docker/compose-health.test.ts +115 -0
- package/src/docker/compose-health.ts +234 -0
- package/src/docker/compose.ts +24 -8
- package/src/docker/derive.ts +35 -9
- package/src/docker/docker.test.ts +304 -12
- package/src/docker/helpers.ts +56 -0
- package/src/docker/index.ts +52 -0
- package/src/docker/ollama-pull.ts +232 -0
- package/src/docker/recipes/cockroach.ts +24 -0
- package/src/docker/recipes/index.ts +32 -0
- package/src/docker/recipes/llama-cpp.ts +273 -0
- package/src/docker/recipes/ollama.ts +19 -23
- package/src/docker/recipes/pgdog.ts +4 -1
- package/src/docker/recipes/postgres.ts +5 -18
- package/src/docker/recipes/sglang.ts +55 -0
- package/src/docker/recipes/supabase.ts +21 -0
- package/src/docker/recipes/timescale.ts +18 -0
- package/src/docker/recipes/vllm.ts +44 -0
- package/src/docker/recipes/yugabyte.ts +23 -0
- package/src/docker/stack-id.test.ts +22 -0
- package/src/docker/stack-id.ts +38 -4
- package/src/docker/types.ts +15 -0
- package/src/drivers/ai-ollama.integration.test.ts +7 -4
- package/src/drivers/signal-engine.ts +10 -0
- package/src/drivers/signal-postgres.ts +24 -2
- package/src/drivers/signal-types.ts +10 -0
- package/src/elements/channel/fallback.test.ts +91 -0
- package/src/elements/channel/hard-bounce.test.ts +82 -0
- package/src/elements/channel/injection.test.ts +153 -0
- package/src/elements/channel/locale-ar.test.ts +102 -0
- package/src/elements/channel/otp-delivery.ts +5 -2
- package/src/elements/channel/receipts-ledger.test.ts +100 -0
- package/src/elements/channel/runtime.ts +24 -1
- package/src/elements/channel/test-helpers.ts +60 -0
- package/src/elements/channel/whatsapp-compliance.test.ts +124 -0
- package/src/elements/store/cache.test.ts +28 -0
- package/src/elements/store/cache.ts +1 -1
- package/src/elements/store/emit-drizzle.ts +43 -9
- package/src/elements/store/runtime.ts +1 -1
- package/src/elements/store/schema-decl.test.ts +2 -0
- package/src/elements/store/schema-decl.ts +15 -0
- package/src/elements/store/seed.ts +1 -1
- package/src/index.ts +1 -0
- package/src/kernel/app.ts +131 -10
- package/src/kernel/boot-bind/signal.ts +6 -2
- package/src/kernel/boot-bind/store.ts +2 -1
- package/src/kernel/boot.test.ts +6 -5
- package/src/kernel/boot.ts +113 -10
- package/src/kernel/compensate.test.ts +131 -0
- package/src/kernel/correlation.test.ts +108 -0
- package/src/kernel/effect-timing.test.ts +82 -0
- package/src/kernel/effects-stamping.test.ts +207 -0
- package/src/kernel/errors.ts +11 -0
- package/src/kernel/flow.ts +38 -0
- package/src/kernel/fx-runs.test.ts +49 -0
- package/src/kernel/fx.test.ts +14 -0
- package/src/kernel/fx.ts +153 -14
- package/src/manifest/sql-resource.ts +41 -0
- package/src/manifest/types.ts +8 -2
- package/src/runs/collect.ts +3 -0
- package/src/runs/export-otlp.ts +64 -0
- package/src/runs/index.ts +16 -0
- package/src/runs/parquet.ts +9 -0
- package/src/runs/types.ts +5 -0
- package/src/runs/window.test.ts +68 -0
- package/src/runs/window.ts +148 -0
- package/src/runtime/boot-warn.test.ts +45 -0
- package/src/runtime/boot-warn.ts +17 -0
- package/src/runtime/dev-request-log.ts +5 -5
- package/src/term.test.ts +95 -10
- package/src/term.ts +369 -14
- package/src/console/ui/dist/assets/panel-overview-DONDzBd2.js +0 -1
- package/src/console/ui/dist/assets/panel-runs-D5zf-D9c.js +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "CockroachDB"
|
|
3
|
+
description: "Distributed SQL — Cloud Connect dialog, verify-full + CA cert, CSL license, port 26257."
|
|
4
|
+
icon: "Database"
|
|
5
|
+
source: "docs/spec/unified-theory.md"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
CockroachDB speaks Postgres wire closely enough that `drivers.store.sql` stays
|
|
9
|
+
`postgres`. Multi-region and distributed transactions are Cockroach's concern beneath
|
|
10
|
+
that protocol.
|
|
11
|
+
|
|
12
|
+
<Callout title="The one rule">
|
|
13
|
+
Use the Cloud Console **Connect** dialog and keep `sslmode=verify-full` with the downloaded CA —
|
|
14
|
+
`sslmode=require` alone is rejected for secure clusters.
|
|
15
|
+
</Callout>
|
|
16
|
+
|
|
17
|
+
## Find credentials (current console)
|
|
18
|
+
|
|
19
|
+
1. Open [CockroachDB Cloud](https://cockroachlabs.cloud) → your **cluster**.
|
|
20
|
+
2. Click **Connect** (cluster overview / top right).
|
|
21
|
+
3. Open the **Connection string** tab (or **General connection string**).
|
|
22
|
+
4. Expand **Download CA Cert** — run the provided command so `root.crt` lands in the
|
|
23
|
+
default Postgres cert directory (or note the path).
|
|
24
|
+
5. Copy the `postgresql://…` string; paste the password when prompted (shown once for
|
|
25
|
+
new SQL users — reset under **SQL Users** if lost).
|
|
26
|
+
|
|
27
|
+
```bash title="process env"
|
|
28
|
+
DATABASE_URL=postgresql://user:password@….cockroachlabs.cloud:26257/defaultdb?sslmode=verify-full&sslrootcert=/path/to/root.crt
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Default SQL port is **26257**, not 5432.
|
|
32
|
+
|
|
33
|
+
## Production guidance
|
|
34
|
+
|
|
35
|
+
| Topic | Guidance |
|
|
36
|
+
| ------- | --------------------------------------------------------------------------------------- |
|
|
37
|
+
| TLS | `verify-full` + `sslrootcert` — required for Cloud |
|
|
38
|
+
| Pooling | Prefer Cockroach's guidance / built-in limits; do not assume Neon-style `-pooler` hosts |
|
|
39
|
+
| Regions | Configure survivability in the Console — opaque to the `postgres` driver |
|
|
40
|
+
|
|
41
|
+
CockroachDB Software License (since Nov 2024): Core open-source discontinued; free for
|
|
42
|
+
orgs under $10M ARR with community support; paid tiers add dedicated support. Not OSI
|
|
43
|
+
open source.
|
|
44
|
+
|
|
45
|
+
## Real gotcha — CA cert path
|
|
46
|
+
|
|
47
|
+
Copying the connection string without downloading the CA yields TLS verify failures
|
|
48
|
+
even when the password is correct. The Connect dialog's download command and
|
|
49
|
+
`sslrootcert=` must agree on the same file path in the environment that runs the app.
|
|
50
|
+
|
|
51
|
+
## Troubleshooting
|
|
52
|
+
|
|
53
|
+
<Accordions>
|
|
54
|
+
<Accordion title="certificate verify failed / SSL connection error">
|
|
55
|
+
|
|
56
|
+
Missing or wrong `sslrootcert`. Re-download from **Connect → Download CA Cert**, point
|
|
57
|
+
`sslrootcert` at that file, keep `sslmode=verify-full`. Using `require` without verify
|
|
58
|
+
is not accepted for Cloud's default secure posture.
|
|
59
|
+
|
|
60
|
+
</Accordion>
|
|
61
|
+
<Accordion title="password authentication failed for user">
|
|
62
|
+
|
|
63
|
+
Password is shown once at user creation. Reset under the cluster **SQL Users** page,
|
|
64
|
+
then update `DATABASE_URL`.
|
|
65
|
+
|
|
66
|
+
</Accordion>
|
|
67
|
+
</Accordions>
|
|
68
|
+
|
|
69
|
+
## Learn more
|
|
70
|
+
|
|
71
|
+
- [YugabyteDB](/docs/providers/yugabytedb) — Apache 2.0 distributed alternative
|
|
72
|
+
- [CockroachDB (self-hosted)](/docs/recipes/cockroachdb) — single-node Docker recipe
|
|
73
|
+
- [Postgres (image)](/docs/recipes/postgres) — driver this backs
|
|
74
|
+
- [Store · SQL](/docs/elements/store#sql) — schema workflows
|
|
75
|
+
|
|
76
|
+
## Next
|
|
77
|
+
|
|
78
|
+
<Cards>
|
|
79
|
+
<Card
|
|
80
|
+
title="YugabyteDB"
|
|
81
|
+
description="Apache-2.0 licensed alternative."
|
|
82
|
+
href="/docs/providers/yugabytedb"
|
|
83
|
+
/>
|
|
84
|
+
<Card title="Neon" description="Serverless single-region option." href="/docs/providers/neon" />
|
|
85
|
+
<Card title="PgDog" description="Self-hosted pooling." href="/docs/recipes/pgdog" />
|
|
86
|
+
</Cards>
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "DigitalOcean Managed Caching"
|
|
3
|
+
description: "Valkey-backed DO Databases — Overview Connection Details, trusted sources, TLS-required high port."
|
|
4
|
+
icon: "Zap"
|
|
5
|
+
source: "docs/spec/unified-theory.md"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
DigitalOcean's managed Redis offering moved to **Valkey** (Managed Caching) after Aiven
|
|
9
|
+
stepped back from Redis. Wire protocol unchanged — `drivers.store.kv` stays `redis`.
|
|
10
|
+
|
|
11
|
+
<Callout title="The one rule">
|
|
12
|
+
Databases → cluster → **Overview → Connection Details**. Copy the `rediss://` URI (public or
|
|
13
|
+
private). Add the client to **Trusted Sources** or you get connection refused.
|
|
14
|
+
</Callout>
|
|
15
|
+
|
|
16
|
+
## Find credentials (current control panel)
|
|
17
|
+
|
|
18
|
+
1. [cloud.digitalocean.com/databases](https://cloud.digitalocean.com/databases) → click
|
|
19
|
+
the **Valkey / Caching** cluster.
|
|
20
|
+
2. **Overview** → **Connection Details**:
|
|
21
|
+
- Toggle **Public network** vs **Private network** (VPC)
|
|
22
|
+
- Copy host, port, user, password, or the assembled connection string
|
|
23
|
+
3. Password is hidden until you reveal/copy it in that panel.
|
|
24
|
+
4. **Network Access** / trusted sources: add app Droplet, App Platform app, or VPC CIDR
|
|
25
|
+
(from Overview **VPC Network**) before connecting.
|
|
26
|
+
|
|
27
|
+
```bash title="process env"
|
|
28
|
+
REDIS_URL=rediss://default:PASSWORD@db-valkey-nyc1-….db.ondigitalocean.com:25061
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Port is a **random high port** from Connection Details — not `6379`. TLS is required;
|
|
32
|
+
there is no plaintext option.
|
|
33
|
+
|
|
34
|
+
## Production guidance
|
|
35
|
+
|
|
36
|
+
| Topic | Guidance |
|
|
37
|
+
| --------------- | ------------------------------------------------------------------------------------- |
|
|
38
|
+
| Engine | **Valkey** on new clusters; older “Managed Redis” capped / unsupported past Redis 7.2 |
|
|
39
|
+
| TLS | Always — use `rediss://` |
|
|
40
|
+
| Trusted sources | Hard firewall — missing entry ⇒ refused even with correct password |
|
|
41
|
+
| VPC | Prefer private connection string + VPC CIDR as a single trusted source |
|
|
42
|
+
|
|
43
|
+
Standalone **Upstash-on-DigitalOcean marketplace** listings are a different, deprecated
|
|
44
|
+
product — not this Databases service.
|
|
45
|
+
|
|
46
|
+
## Real gotcha — trusted sources
|
|
47
|
+
|
|
48
|
+
Correct `REDIS_URL` from a laptop not in Trusted Sources fails with connection refused.
|
|
49
|
+
Add your IP (or use a Droplet already allowed / VPC CIDR) under **Network Access**.
|
|
50
|
+
|
|
51
|
+
## Troubleshooting
|
|
52
|
+
|
|
53
|
+
<Accordions>
|
|
54
|
+
<Accordion title="Connection refused (hostname)">
|
|
55
|
+
|
|
56
|
+
Wrong port, or client IP not in trusted sources. Re-copy port from **Connection
|
|
57
|
+
Details**; add the client under **Network Access → Trusted Sources**.
|
|
58
|
+
|
|
59
|
+
</Accordion>
|
|
60
|
+
<Accordion title="Connection refused (IP) on private hostname">
|
|
61
|
+
|
|
62
|
+
Private URL used from outside the VPC. Switch to **Public network** details (and allow
|
|
63
|
+
your IP), or run the app on a Droplet in the same VPC with the private URI.
|
|
64
|
+
|
|
65
|
+
</Accordion>
|
|
66
|
+
</Accordions>
|
|
67
|
+
|
|
68
|
+
## Learn more
|
|
69
|
+
|
|
70
|
+
- [Valkey (image)](/docs/recipes/valkey) — self-hosted peer
|
|
71
|
+
- [Store · KV](/docs/elements/store#kv)
|
|
72
|
+
- [Dragonfly Cloud](/docs/providers/dragonfly-cloud) — alternative managed KV
|
|
73
|
+
|
|
74
|
+
## Next
|
|
75
|
+
|
|
76
|
+
<Cards>
|
|
77
|
+
<Card
|
|
78
|
+
title="Dragonfly Cloud"
|
|
79
|
+
description="Another managed alternative."
|
|
80
|
+
href="/docs/providers/dragonfly-cloud"
|
|
81
|
+
/>
|
|
82
|
+
<Card
|
|
83
|
+
title="Redis Cloud"
|
|
84
|
+
description="Vendor-native alternative."
|
|
85
|
+
href="/docs/providers/redis-cloud"
|
|
86
|
+
/>
|
|
87
|
+
<Card title="Caddy" description="Local proxy pairing." href="/docs/recipes/caddy" />
|
|
88
|
+
</Cards>
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Dragonfly Cloud"
|
|
3
|
+
description: "Managed Dragonfly — data store row drawer, Redis-compatible Connection URI, TLS passkey, private network prod."
|
|
4
|
+
icon: "Zap"
|
|
5
|
+
source: "docs/spec/unified-theory.md"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Dragonfly Cloud runs the same multi-threaded engine as the
|
|
9
|
+
[Dragonfly image](/docs/recipes/dragonfly), with a managed endpoint.
|
|
10
|
+
`drivers.store.kv` stays `redis`.
|
|
11
|
+
|
|
12
|
+
<Callout title="The one rule">
|
|
13
|
+
Click the **data store row** to open the side drawer — copy the **Redis-compatible Connection
|
|
14
|
+
URI** (includes passkey). Paste it as `REDIS_URL`.
|
|
15
|
+
</Callout>
|
|
16
|
+
|
|
17
|
+
## Find credentials (current console)
|
|
18
|
+
|
|
19
|
+
1. Open Dragonfly Cloud → **Data Stores**.
|
|
20
|
+
2. Wait until **Status** is **Active**.
|
|
21
|
+
3. Click the data store **row** (opens the configuration drawer).
|
|
22
|
+
4. Copy:
|
|
23
|
+
- **Redis-compatible Connection URI** (e.g. `rediss://default:PASS@….dragonflydb.cloud:6385`)
|
|
24
|
+
- or host / port / `default` user / passkey separately
|
|
25
|
+
5. Paste the URI into `REDIS_URL` unchanged when it already uses `rediss://`.
|
|
26
|
+
|
|
27
|
+
```bash title="process env"
|
|
28
|
+
REDIS_URL=rediss://default:PASSKEY@xxxxx.dragonflydb.cloud:6385
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Smoke-check: `redis-cli -u "$REDIS_URL" PING`.
|
|
32
|
+
|
|
33
|
+
## Production guidance
|
|
34
|
+
|
|
35
|
+
| Topic | Guidance |
|
|
36
|
+
| --------------- | ---------------------------------------------------------------------------- |
|
|
37
|
+
| Public network | TLS + passkey **on** by default — leave TLS enabled |
|
|
38
|
+
| Private network | Recommended for production (peering) — passkey still required on public |
|
|
39
|
+
| HA | Enable high availability in the data store settings before you need failover |
|
|
40
|
+
| Driver | Same `redis` driver as self-hosted Dragonfly |
|
|
41
|
+
| Port | Drawer URI often uses **6385** (not 6379) — copy the URI wholesale |
|
|
42
|
+
|
|
43
|
+
Self-hosting comparison: the [Dragonfly image](/docs/recipes/dragonfly) needs
|
|
44
|
+
`OKE_STORE_KV_PASSWORD` + `memlock`; Cloud replaces that with the drawer passkey.
|
|
45
|
+
|
|
46
|
+
Do not reuse a self-hosted `REDIS_URL` without `rediss://` when the drawer shows TLS.
|
|
47
|
+
|
|
48
|
+
## Real gotcha — connecting before Active
|
|
49
|
+
|
|
50
|
+
The drawer is visible while the store is still provisioning; clients get connection
|
|
51
|
+
errors until **Status = Active**. Wait for Active before wiring CI or app boot.
|
|
52
|
+
|
|
53
|
+
## Troubleshooting
|
|
54
|
+
|
|
55
|
+
<Accordions>
|
|
56
|
+
<Accordion title="Connection refused / timeout while Status is not Active">
|
|
57
|
+
|
|
58
|
+
Provisioning. Retry when the console shows **Active**. Do not rotate the passkey yet —
|
|
59
|
+
confirm status first.
|
|
60
|
+
|
|
61
|
+
</Accordion>
|
|
62
|
+
<Accordion title="NOAUTH / WRONGPASS">
|
|
63
|
+
|
|
64
|
+
URI missing the passkey, or passkey rotated in the drawer without updating env. Re-copy
|
|
65
|
+
the Connection URI from the data store drawer after any rotation.
|
|
66
|
+
|
|
67
|
+
</Accordion>
|
|
68
|
+
</Accordions>
|
|
69
|
+
|
|
70
|
+
## Learn more
|
|
71
|
+
|
|
72
|
+
- [Dragonfly (image)](/docs/recipes/dragonfly) — self-hosted peer
|
|
73
|
+
- [Store · KV](/docs/elements/store#kv)
|
|
74
|
+
- [Upstash](/docs/providers/upstash) — serverless alternative
|
|
75
|
+
|
|
76
|
+
## Next
|
|
77
|
+
|
|
78
|
+
<Cards>
|
|
79
|
+
<Card title="Upstash" description="Serverless-friendly option." href="/docs/providers/upstash" />
|
|
80
|
+
<Card title="Redis Cloud" description="Vendor-native Redis." href="/docs/providers/redis-cloud" />
|
|
81
|
+
<Card title="YugabyteDB" description="Managed SQL-side pair." href="/docs/providers/yugabytedb" />
|
|
82
|
+
</Cards>
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Amazon ElastiCache"
|
|
3
|
+
description: "AWS-managed Redis OSS or Valkey — Primary Endpoint, AUTH token, Redis OSS capped at 7.1, VPC-only."
|
|
4
|
+
icon: "Zap"
|
|
5
|
+
source: "docs/spec/unified-theory.md"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
ElastiCache runs Redis OSS-compatible or Valkey engines inside your VPC. Both speak the
|
|
9
|
+
same wire protocol — `drivers.store.kv` stays `redis`.
|
|
10
|
+
|
|
11
|
+
<Callout title="The one rule">
|
|
12
|
+
Copy the **Primary Endpoint** (cluster mode disabled) from the ElastiCache console — not a replica
|
|
13
|
+
reader endpoint. Use `rediss://` when encryption in transit is on.
|
|
14
|
+
</Callout>
|
|
15
|
+
|
|
16
|
+
## Find credentials (current console)
|
|
17
|
+
|
|
18
|
+
1. AWS Console → **ElastiCache** → **Valkey caches** or **Redis OSS caches**.
|
|
19
|
+
2. Click the **cluster name** (not only the radio button).
|
|
20
|
+
3. On the cluster detail page, copy:
|
|
21
|
+
- **Primary Endpoint** (+ port, usually `6379`) for cluster-mode **disabled**
|
|
22
|
+
- **Configuration Endpoint** for cluster-mode **enabled** (needs a cluster-aware
|
|
23
|
+
client — oke's single-URL driver expects non-cluster / primary)
|
|
24
|
+
4. Auth: cluster **Connectivity** / **Auth token** (or Secrets Manager reference) —
|
|
25
|
+
set at creation or rotation; there is no “password eye” identical to Redis Cloud.
|
|
26
|
+
5. Build `REDIS_URL` yourself:
|
|
27
|
+
|
|
28
|
+
```bash title="process env"
|
|
29
|
+
# Encryption in transit ON (default on many new clusters)
|
|
30
|
+
REDIS_URL=rediss://:AUTH_TOKEN@my-cluster.xxxxx.ng.0001.use1.cache.amazonaws.com:6379
|
|
31
|
+
|
|
32
|
+
# Transit encryption OFF
|
|
33
|
+
# REDIS_URL=redis://:AUTH_TOKEN@my-cluster.xxxxx.ng.0001.use1.cache.amazonaws.com:6379
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Production guidance
|
|
37
|
+
|
|
38
|
+
| Topic | Guidance |
|
|
39
|
+
| ------------------ | ----------------------------------------------------------------------------------- |
|
|
40
|
+
| Networking | **VPC-only** — app must share VPC, peering, or PrivateLink; no public hostname |
|
|
41
|
+
| Engine | Redis OSS **or** Valkey — same `redis` driver |
|
|
42
|
+
| Cluster mode | Prefer **disabled** + Primary Endpoint for oke's URL-shaped client |
|
|
43
|
+
| Transit encryption | When enabled, scheme must be `rediss://` |
|
|
44
|
+
| AUTH | Set at create/rotate — ElastiCache does not show a Redis-Cloud-style “eye” password |
|
|
45
|
+
|
|
46
|
+
Reader endpoints exist for read scaling; oke's single `REDIS_URL` should target the
|
|
47
|
+
**Primary Endpoint** so writes and Gate/Signal counters hit the primary.
|
|
48
|
+
|
|
49
|
+
## Real gotcha — Redis OSS version cap
|
|
50
|
+
|
|
51
|
+
ElastiCache **Redis OSS tops out at 7.1**. Versions **7.2+ are Valkey-only**. You can
|
|
52
|
+
in-place upgrade Redis OSS → Valkey 7.2; planning a “Redis 7.2” engine on ElastiCache
|
|
53
|
+
is a category error — pick Valkey or stay ≤7.1 on Redis OSS.
|
|
54
|
+
|
|
55
|
+
## Troubleshooting
|
|
56
|
+
|
|
57
|
+
<Accordions>
|
|
58
|
+
<Accordion title="Connection timed out from laptop / CI">
|
|
59
|
+
|
|
60
|
+
Expected — no public endpoint. Run the app in the VPC (ECS/EKS/EC2) or use a bastion /
|
|
61
|
+
VPN. Security groups must allow the app SG → cache port.
|
|
62
|
+
|
|
63
|
+
</Accordion>
|
|
64
|
+
<Accordion title="WRONGPASS / NOAUTH after enabling AUTH">
|
|
65
|
+
|
|
66
|
+
Token not embedded in `REDIS_URL`, or still using `redis://` against a TLS-required
|
|
67
|
+
endpoint. Match scheme to **Encryption in-transit**, put the token after `rediss://:`.
|
|
68
|
+
|
|
69
|
+
</Accordion>
|
|
70
|
+
</Accordions>
|
|
71
|
+
|
|
72
|
+
## Learn more
|
|
73
|
+
|
|
74
|
+
- [Redis (image)](/docs/recipes/redis) · [Valkey (image)](/docs/recipes/valkey)
|
|
75
|
+
- [Memorystore](/docs/providers/memorystore) — GCP equivalent
|
|
76
|
+
- [Store · KV](/docs/elements/store#kv)
|
|
77
|
+
|
|
78
|
+
## Next
|
|
79
|
+
|
|
80
|
+
<Cards>
|
|
81
|
+
<Card title="Memorystore" description="GCP's equivalent." href="/docs/providers/memorystore" />
|
|
82
|
+
<Card
|
|
83
|
+
title="Azure Cache for Redis"
|
|
84
|
+
description="Azure's equivalent."
|
|
85
|
+
href="/docs/providers/azure-redis"
|
|
86
|
+
/>
|
|
87
|
+
<Card
|
|
88
|
+
title="Redis Cloud"
|
|
89
|
+
description="Vendor-neutral managed option."
|
|
90
|
+
href="/docs/providers/redis-cloud"
|
|
91
|
+
/>
|
|
92
|
+
</Cards>
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Providers"
|
|
3
|
+
description: "Managed cloud SQL and Redis providers behind oke's postgres and redis drivers — dashboard click-paths, pooling, and gotchas."
|
|
4
|
+
icon: "Cloud"
|
|
5
|
+
source: "docs/spec/unified-theory.md"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Every provider below speaks a protocol oke already drives — Postgres wire or Redis wire.
|
|
9
|
+
Hand the connection string to that driver; no new driver id, no Flow code changes.
|
|
10
|
+
|
|
11
|
+
<Callout title="The one rule">
|
|
12
|
+
Vendor choice lives in a connection URL (`DATABASE_URL` / `REDIS_URL`) — never in
|
|
13
|
+
`drivers.store.sql` / `drivers.store.kv`, which only ever say `postgres` or `redis`.
|
|
14
|
+
</Callout>
|
|
15
|
+
|
|
16
|
+
## SQL providers
|
|
17
|
+
|
|
18
|
+
Managed Postgres-wire databases — set `DATABASE_URL`, driver stays `postgres`.
|
|
19
|
+
|
|
20
|
+
<Cards>
|
|
21
|
+
<Card
|
|
22
|
+
title="Neon"
|
|
23
|
+
description="Connect widget · pooled vs direct · cold start."
|
|
24
|
+
href="/docs/providers/neon"
|
|
25
|
+
/>
|
|
26
|
+
<Card
|
|
27
|
+
title="Supabase"
|
|
28
|
+
description="Connect modes · :6543 vs :5432 · free pause."
|
|
29
|
+
href="/docs/providers/supabase"
|
|
30
|
+
/>
|
|
31
|
+
<Card
|
|
32
|
+
title="CockroachDB"
|
|
33
|
+
description="Connect dialog · verify-full · CA cert."
|
|
34
|
+
href="/docs/providers/cockroachdb"
|
|
35
|
+
/>
|
|
36
|
+
<Card
|
|
37
|
+
title="YugabyteDB"
|
|
38
|
+
description="YSQL on :5433 · Connect → Application."
|
|
39
|
+
href="/docs/providers/yugabytedb"
|
|
40
|
+
/>
|
|
41
|
+
</Cards>
|
|
42
|
+
|
|
43
|
+
## Redis providers
|
|
44
|
+
|
|
45
|
+
Managed Redis-wire caches — set `REDIS_URL`, driver stays `redis`.
|
|
46
|
+
|
|
47
|
+
<Cards>
|
|
48
|
+
<Card
|
|
49
|
+
title="Redis Cloud"
|
|
50
|
+
description="Configuration tab · Connect wizard · rediss://"
|
|
51
|
+
href="/docs/providers/redis-cloud"
|
|
52
|
+
/>
|
|
53
|
+
<Card
|
|
54
|
+
title="Amazon ElastiCache"
|
|
55
|
+
description="Primary Endpoint · Redis OSS ≤7.1."
|
|
56
|
+
href="/docs/providers/elasticache"
|
|
57
|
+
/>
|
|
58
|
+
<Card
|
|
59
|
+
title="Google Memorystore"
|
|
60
|
+
description="Primary Endpoint IP · TLS on 6378."
|
|
61
|
+
href="/docs/providers/memorystore"
|
|
62
|
+
/>
|
|
63
|
+
<Card
|
|
64
|
+
title="Azure Cache for Redis"
|
|
65
|
+
description="Access keys · TLS port 6380."
|
|
66
|
+
href="/docs/providers/azure-redis"
|
|
67
|
+
/>
|
|
68
|
+
<Card
|
|
69
|
+
title="Upstash"
|
|
70
|
+
description="TCP rediss:// — not REST tokens."
|
|
71
|
+
href="/docs/providers/upstash"
|
|
72
|
+
/>
|
|
73
|
+
<Card
|
|
74
|
+
title="Dragonfly Cloud"
|
|
75
|
+
description="Data store drawer · Connection URI."
|
|
76
|
+
href="/docs/providers/dragonfly-cloud"
|
|
77
|
+
/>
|
|
78
|
+
<Card
|
|
79
|
+
title="DigitalOcean Managed Caching"
|
|
80
|
+
description="Connection Details · trusted sources."
|
|
81
|
+
href="/docs/providers/digitalocean-caching"
|
|
82
|
+
/>
|
|
83
|
+
</Cards>
|
|
84
|
+
|
|
85
|
+
## Learn more
|
|
86
|
+
|
|
87
|
+
- [Recipes](/docs/recipes) — self-hosted recipes for the same protocols
|
|
88
|
+
- [Store](/docs/elements/store) — `sql` / `kv` facets
|
|
89
|
+
- [Environment variables](/docs/reference/environment-variables) — URL precedence
|
|
90
|
+
|
|
91
|
+
## Next
|
|
92
|
+
|
|
93
|
+
<Cards>
|
|
94
|
+
<Card
|
|
95
|
+
title="Neon"
|
|
96
|
+
description="Start with a serverless SQL option."
|
|
97
|
+
href="/docs/providers/neon"
|
|
98
|
+
/>
|
|
99
|
+
<Card title="Recipes" description="Run the same protocols yourself." href="/docs/recipes" />
|
|
100
|
+
<Card title="Store" description="The facets these drivers back." href="/docs/elements/store" />
|
|
101
|
+
</Cards>
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Google Cloud Memorystore"
|
|
3
|
+
description: "GCP-managed Redis/Valkey — Instance details Primary Endpoint, AUTH string, TLS on 6378, VPC-only."
|
|
4
|
+
icon: "Zap"
|
|
5
|
+
source: "docs/spec/unified-theory.md"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Memorystore for Redis (and the Valkey offering) is private-IP only inside your VPC.
|
|
9
|
+
`drivers.store.kv` stays `redis`.
|
|
10
|
+
|
|
11
|
+
<Callout title="The one rule">
|
|
12
|
+
Open the instance → **Connections** for **Primary Endpoint** + port; **Security** for the AUTH
|
|
13
|
+
string. There is no public hostname to paste.
|
|
14
|
+
</Callout>
|
|
15
|
+
|
|
16
|
+
## Find credentials (current console)
|
|
17
|
+
|
|
18
|
+
1. Google Cloud Console → **Memorystore** → **Redis** (or Valkey) → click **Instance ID**.
|
|
19
|
+
2. **Connections** section → copy **Primary Endpoint** (private IP) and **Port**
|
|
20
|
+
(usually `6379`).
|
|
21
|
+
3. If AUTH is enabled: **Security** section → **AUTH string** (or
|
|
22
|
+
`gcloud redis instances get-auth-string INSTANCE --region=REGION`).
|
|
23
|
+
4. If **in-transit encryption** is on: download the **TLS server certificate** from the
|
|
24
|
+
instance page; clients use port **6378** with that CA (not plain 6379).
|
|
25
|
+
|
|
26
|
+
```bash title="process env"
|
|
27
|
+
# AUTH on, transit encryption off (common default)
|
|
28
|
+
REDIS_URL=redis://:AUTH_STRING@10.0.0.3:6379
|
|
29
|
+
|
|
30
|
+
# Transit encryption on → port 6378 + rediss:// + CA configured in the client
|
|
31
|
+
# REDIS_URL=rediss://:AUTH_STRING@10.0.0.3:6378
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Cloud Run / Cloud Functions need a **Serverless VPC Access** connector on the same
|
|
35
|
+
network.
|
|
36
|
+
|
|
37
|
+
## Production guidance
|
|
38
|
+
|
|
39
|
+
| Topic | Guidance |
|
|
40
|
+
| ---------- | -------------------------------------------------------------------------------- |
|
|
41
|
+
| Networking | Private IP only — never a public endpoint option |
|
|
42
|
+
| AUTH | Optional but recommended; string is on the instance Security panel |
|
|
43
|
+
| TLS | **Not** default — enable in-transit encryption explicitly; port becomes **6378** |
|
|
44
|
+
| Tiers | Basic vs Standard (replica) — pick before you need HA |
|
|
45
|
+
|
|
46
|
+
## Real gotcha — TLS port flip
|
|
47
|
+
|
|
48
|
+
Enabling in-transit encryption changes the client port to **6378** and requires the
|
|
49
|
+
server CA. Leaving `REDIS_URL` on `:6379` after enabling TLS looks like a mysterious
|
|
50
|
+
timeout — update port and scheme together.
|
|
51
|
+
|
|
52
|
+
## Troubleshooting
|
|
53
|
+
|
|
54
|
+
<Accordions>
|
|
55
|
+
<Accordion title="Connection refused / timeout from Cloud Run">
|
|
56
|
+
|
|
57
|
+
Missing Serverless VPC Access connector, or connector on the wrong VPC. Memorystore is
|
|
58
|
+
unreachable from the public internet by design.
|
|
59
|
+
|
|
60
|
+
</Accordion>
|
|
61
|
+
<Accordion title="NOAUTH Authentication required">
|
|
62
|
+
|
|
63
|
+
AUTH enabled but password omitted from `REDIS_URL`. Copy the AUTH string from
|
|
64
|
+
**Security** and use `redis://:AUTH@ip:port`.
|
|
65
|
+
|
|
66
|
+
</Accordion>
|
|
67
|
+
</Accordions>
|
|
68
|
+
|
|
69
|
+
## Learn more
|
|
70
|
+
|
|
71
|
+
- [Redis (image)](/docs/recipes/redis) · [Valkey (image)](/docs/recipes/valkey)
|
|
72
|
+
- [ElastiCache](/docs/providers/elasticache) — AWS equivalent
|
|
73
|
+
- [Store · KV](/docs/elements/store#kv)
|
|
74
|
+
|
|
75
|
+
## Next
|
|
76
|
+
|
|
77
|
+
<Cards>
|
|
78
|
+
<Card title="ElastiCache" description="AWS's equivalent." href="/docs/providers/elasticache" />
|
|
79
|
+
<Card
|
|
80
|
+
title="Azure Cache for Redis"
|
|
81
|
+
description="Azure's equivalent."
|
|
82
|
+
href="/docs/providers/azure-redis"
|
|
83
|
+
/>
|
|
84
|
+
<Card
|
|
85
|
+
title="Dragonfly Cloud"
|
|
86
|
+
description="Public TLS endpoint option."
|
|
87
|
+
href="/docs/providers/dragonfly-cloud"
|
|
88
|
+
/>
|
|
89
|
+
</Cards>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Providers",
|
|
3
|
+
"icon": "Cloud",
|
|
4
|
+
"pages": [
|
|
5
|
+
"index",
|
|
6
|
+
"---SQL providers---",
|
|
7
|
+
"neon",
|
|
8
|
+
"supabase",
|
|
9
|
+
"cockroachdb",
|
|
10
|
+
"yugabytedb",
|
|
11
|
+
"---Redis providers---",
|
|
12
|
+
"redis-cloud",
|
|
13
|
+
"elasticache",
|
|
14
|
+
"memorystore",
|
|
15
|
+
"azure-redis",
|
|
16
|
+
"upstash",
|
|
17
|
+
"dragonfly-cloud",
|
|
18
|
+
"digitalocean-caching"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Neon"
|
|
3
|
+
description: "Serverless Postgres — Connect widget, pooled vs direct, scale-to-zero cold start, neon_superuser for pgvector."
|
|
4
|
+
icon: "Database"
|
|
5
|
+
source: "docs/spec/unified-theory.md"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Neon separates storage from compute: branches are cheap copy-on-write metadata, and idle
|
|
9
|
+
compute scales to zero. Wire protocol is plain Postgres — `drivers.store.sql` stays
|
|
10
|
+
`postgres`.
|
|
11
|
+
|
|
12
|
+
<Callout title="The one rule">
|
|
13
|
+
Copy the connection string from Neon's **Connect** widget. Prefer the pooled hostname for app
|
|
14
|
+
traffic and the direct hostname for migrations — never invent the `-pooler` suffix by hand.
|
|
15
|
+
</Callout>
|
|
16
|
+
|
|
17
|
+
## Find credentials (current console)
|
|
18
|
+
|
|
19
|
+
1. Open [console.neon.tech](https://console.neon.tech) → your **project**.
|
|
20
|
+
2. On the **Project Dashboard**, click **Connect**.
|
|
21
|
+
3. In **Connect to your database**, pick **Branch**, **Compute**, **Database**, and
|
|
22
|
+
**Role**.
|
|
23
|
+
4. Toggle **Connection pooling** **on** for the pooled string (hostname gains `-pooler`),
|
|
24
|
+
or **off** for the direct string.
|
|
25
|
+
5. Copy the connection string into `DATABASE_URL` (add `?sslmode=require` if missing).
|
|
26
|
+
|
|
27
|
+
```bash title="process env"
|
|
28
|
+
# Runtime (pooled) — ep-….…-pooler.…neon.tech
|
|
29
|
+
DATABASE_URL=postgresql://neondb_owner:…@ep-xxxx-pooler.region.aws.neon.tech/neondb?sslmode=require
|
|
30
|
+
|
|
31
|
+
# Migrations / pg_dump / LISTEN — same host without -pooler
|
|
32
|
+
# OKE_STORE_SQL_URL=postgresql://neondb_owner:…@ep-xxxx.region.aws.neon.tech/neondb?sslmode=require
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
No `images["store.sql"]` pin — Neon runs the server.
|
|
36
|
+
|
|
37
|
+
## Pooled vs direct
|
|
38
|
+
|
|
39
|
+
| Use | Which string | Why |
|
|
40
|
+
| ------------------------------------------------------------- | ------------------------- | -------------------------------------------------------- |
|
|
41
|
+
| App / serverless / Drizzle runtime | **Pooled** (`-pooler`) | PgBouncer transaction mode; up to 10k client connections |
|
|
42
|
+
| `oke db migrate` / `pg_dump` / logical replication / `LISTEN` | **Direct** (no `-pooler`) | Session features break under transaction pooling |
|
|
43
|
+
|
|
44
|
+
Do **not** also put [PgDog](/docs/recipes/pgdog) in front of Neon — one pooler only.
|
|
45
|
+
|
|
46
|
+
**Consequence:** seeding or migrations through the pooled URL often fail with prepared-statement
|
|
47
|
+
errors; switch those jobs to the direct URL.
|
|
48
|
+
|
|
49
|
+
## pgvector and roles
|
|
50
|
+
|
|
51
|
+
`CREATE EXTENSION vector;` works on every plan — no add-on. Roles created in the Neon
|
|
52
|
+
Console / CLI / API get `neon_superuser` membership and can install supported extensions.
|
|
53
|
+
|
|
54
|
+
Roles you create only with raw SQL (`CREATE ROLE`) do **not** get `neon_superuser` — they
|
|
55
|
+
hit permission errors on extension install. Create app roles in the Console (or grant
|
|
56
|
+
deliberately) when you need `pgvector` setup from that role.
|
|
57
|
+
|
|
58
|
+
## Free tier / production limits
|
|
59
|
+
|
|
60
|
+
| Limit | Free plan |
|
|
61
|
+
| ------------- | ----------------------------------------- |
|
|
62
|
+
| Scale to zero | After **5 min** idle — **cannot disable** |
|
|
63
|
+
| Compute | **100 CU-hours** / project / month |
|
|
64
|
+
| Storage | **0.5 GB** / project |
|
|
65
|
+
| Autoscaling | Up to 2 CU |
|
|
66
|
+
|
|
67
|
+
Hitting CU-hours or storage **suspends compute** until the next billing period or an
|
|
68
|
+
upgrade. Always-on production needs Launch/Scale with scale-to-zero disabled.
|
|
69
|
+
|
|
70
|
+
## Real gotcha — cold start
|
|
71
|
+
|
|
72
|
+
After scale-to-zero, the first query pays a wake-up (hundreds of ms to a few seconds).
|
|
73
|
+
Health checks that expect sub-100ms on an idle Free project will flap. Paid plans can
|
|
74
|
+
disable scale-to-zero; Free cannot.
|
|
75
|
+
|
|
76
|
+
## Troubleshooting
|
|
77
|
+
|
|
78
|
+
<Accordions>
|
|
79
|
+
<Accordion title="remaining connection slots are reserved / pooler wait timeout">
|
|
80
|
+
|
|
81
|
+
Too many **direct** connections, or pooler server pool exhausted for your compute size.
|
|
82
|
+
Move runtime traffic to the `-pooler` hostname; keep a small number of direct admin
|
|
83
|
+
sessions. Neon reserves connections for the superuser account on each compute size.
|
|
84
|
+
|
|
85
|
+
</Accordion>
|
|
86
|
+
<Accordion title='permission denied to create extension "vector"'>
|
|
87
|
+
|
|
88
|
+
The role is not a Console-created / `neon_superuser` member. Re-run as `neondb_owner` (or
|
|
89
|
+
another Console role), or grant appropriately — raw SQL roles start with public-schema
|
|
90
|
+
privileges only.
|
|
91
|
+
|
|
92
|
+
</Accordion>
|
|
93
|
+
</Accordions>
|
|
94
|
+
|
|
95
|
+
## Learn more
|
|
96
|
+
|
|
97
|
+
- [Postgres (image)](/docs/recipes/postgres) — self-hosted peer
|
|
98
|
+
- [Store · Index](/docs/elements/store#index) — `pgvector` usage
|
|
99
|
+
- [PgDog](/docs/recipes/pgdog) — when you self-host pooling instead
|
|
100
|
+
|
|
101
|
+
## Next
|
|
102
|
+
|
|
103
|
+
<Cards>
|
|
104
|
+
<Card
|
|
105
|
+
title="Supabase"
|
|
106
|
+
description="Another managed Postgres option."
|
|
107
|
+
href="/docs/providers/supabase"
|
|
108
|
+
/>
|
|
109
|
+
<Card
|
|
110
|
+
title="CockroachDB"
|
|
111
|
+
description="Distributed SQL alternative."
|
|
112
|
+
href="/docs/providers/cockroachdb"
|
|
113
|
+
/>
|
|
114
|
+
<Card title="PgDog" description="Self-hosted pooler comparison." href="/docs/recipes/pgdog" />
|
|
115
|
+
</Cards>
|