Merge pull request #16335 from supabase/d2-blog-post
Kappa - D2 - blog post
No files matched your search
@@ -0,0 +1,330 @@
|
||||
---
|
||||
title: 'Supabase Local Dev: migrations, branching, and observability'
|
||||
description: New features to streamline the interaction between CLI, code editors, and remote databases.
|
||||
launchweek: 8
|
||||
tags:
|
||||
- launch-week
|
||||
- announcements
|
||||
date: '2023-08-08'
|
||||
toc_depth: 3
|
||||
author: qiao,soedirgo,jonny
|
||||
image: launch-week-8/day-2/OG-day2.jpg
|
||||
thumb: launch-week-8/day-2/thumb-day2.jpg
|
||||
---
|
||||
|
||||
One of our goals at Supabase is to make Postgres development delightful. To do this, we need to simplify the experience between our CLI, your code editor, and the remote Postgres database powering your applications.
|
||||
|
||||
We received feedback recently about our local development experience, encouraging us to improve. This iteration introduces many new features to address that feedback. Let’s jump into a few of the features we’re launching today.
|
||||
|
||||
## Postgres Language Server
|
||||
|
||||

|
||||
|
||||
One of the unique features of Supabase is the ability to access your Postgres database directly from a browser or mobile app through our [Serverless APIs](https://supabase.com/docs/guides/api). This means that developers are writing more [PL/pgSQL](https://www.postgresql.org/docs/current/plpgsql.html).
|
||||
|
||||
While code editors have great support for most programming languages, SQL support is underwhelming. We want to make Postgres as simple as Python. Our recently announced [Postgres Language Server](https://github.com/supabase/postgres_lsp) takes us a step in that direction - eventually it will provide first-class support for Postgres in your favorite code editor including Linting, Syntax Highlighting, Migrations Parsing, SQL Auto-complete, and Intellisense.
|
||||
|
||||
The Postgres Language Server is not ready for Production just yet. The majority of work is still ahead, but we've verified that the technical approach works and we're making it public now so that we can develop it in the open with input from the community. We’re already receiving amazing [feedback](https://github.com/supabase/postgres_lsp/discussions) and [support](https://news.ycombinator.com/item?id=37020610).
|
||||
|
||||
Follow the progress of the [Postgres Language Server on GitHub](https://github.com/supabase/postgres_lsp).
|
||||
|
||||
## Observability tools for Postgres
|
||||
|
||||

|
||||
|
||||
We’ve added [debugging utilities](https://supabase.com/docs/guides/database/inspect) to our CLI to identify production issues via the `supabase inspect db` command. This interface includes 19 different commands to help you solve everything from slow queries to redundant indexes.
|
||||
|
||||
A lot of the credit for this belongs to [Heroku’s pg-extras](https://github.com/heroku/heroku-pg-extras) feature, an amazingly useful set of functionality. We’ve adapted the work they started, added a few additional commands, and made it available for any Postgres database. Simply append the `--db-url` param to use these commands with your own Postgres database.
|
||||
|
||||
This is just a starting point for the Supabase inspector. We’ll grow this feature to become an essential part of your Postgres toolkit.
|
||||
|
||||
<details>
|
||||
<summary>See full command</summary>
|
||||
<div>
|
||||
|
||||
{/* prettier-ignore */}
|
||||
```markdown
|
||||
supabase inspect db --help
|
||||
Tools to inspect your Supabase database
|
||||
|
||||
Usage:
|
||||
supabase inspect db [command]
|
||||
|
||||
Available Commands:
|
||||
bloat Estimates space allocated to a relation that is full of dead tuples
|
||||
blocking Show queries that are holding locks and the queries that are waiting for them to be released
|
||||
cache-hit Show cache hit rates for tables and indices
|
||||
calls Show queries from pg_stat_statements ordered by total times called
|
||||
index-sizes Show index sizes of individual indexes
|
||||
index-usage Show information about the efficiency of indexes
|
||||
locks Show queries which have taken out an exclusive lock on a relation
|
||||
long-running-queries Show currently running queries running for longer than 5 minutes
|
||||
outliers Show queries from pg_stat_statements ordered by total execution time
|
||||
replication-slots Show information about replication slots on the database
|
||||
role-connections Show number of active connections for all database roles
|
||||
seq-scans Show number of sequential scans recorded against all tables
|
||||
table-index-sizes Show index sizes of individual tables
|
||||
table-record-counts Show estimated number of rows per table
|
||||
table-sizes Show table sizes of individual tables without their index sizes
|
||||
total-index-size Show total size of all indexes
|
||||
total-table-sizes Show total table sizes, including table index sizes
|
||||
unused-indexes Show indexes with low usage
|
||||
vacuum-stats Show statistics related to vacuum operations per table
|
||||
```
|
||||
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Read the docs</summary>
|
||||
{/* prettier-ignore */}
|
||||
<div>
|
||||
- [Show most frequently run queries](https://supabase.com/docs/reference/cli/supabase-inspect-db-calls)
|
||||
- [Show long running queries](https://supabase.com/docs/reference/cli/supabase-inspect-db-long-running-queries)
|
||||
- [Show queries ordered by total execution time](https://supabase.com/docs/reference/cli/supabase-inspect-db-outliers)
|
||||
- [Show queries waiting and holding locks](https://supabase.com/docs/reference/cli/supabase-inspect-db-blocking)
|
||||
- [Show queries taking exclusive locks](https://supabase.com/docs/reference/cli/supabase-inspect-db-locks)
|
||||
- [Show total size of all indexes](https://supabase.com/docs/reference/cli/supabase-inspect-db-total-index-size)
|
||||
- [Show sizes of individual indexes](https://supabase.com/docs/reference/cli/supabase-inspect-db-index-sizes)
|
||||
- [Show information about index efficiency](https://supabase.com/docs/reference/cli/supabase-inspect-db-index-usage)
|
||||
- [Show indexes with low usage](https://supabase.com/docs/reference/cli/supabase-inspect-db-unused-indexes)
|
||||
- [Show total size of all tables](https://supabase.com/docs/reference/cli/supabase-inspect-db-total-table-sizes)
|
||||
- [Show sizes of individual tables](https://supabase.com/docs/reference/cli/supabase-inspect-db-table-sizes)
|
||||
- [Show index sizes of individual tables](https://supabase.com/docs/reference/cli/supabase-inspect-db-table-index-sizes)
|
||||
- [Show cache hit rates for tables and indices](https://supabase.com/docs/reference/cli/supabase-inspect-db-cache-hit)
|
||||
- [Show estimated number of rows per table](https://supabase.com/docs/reference/cli/supabase-inspect-db-table-record-counts)
|
||||
- [Show number of sequential scans for all tables](https://supabase.com/docs/reference/cli/supabase-inspect-db-seq-scans)
|
||||
- [Show information about replication slots](https://supabase.com/docs/reference/cli/supabase-inspect-db-replication-slots)
|
||||
- [Show number of active connections](https://supabase.com/docs/reference/cli/supabase-inspect-db-role-connections)
|
||||
- [Show estimated database bloat](https://supabase.com/docs/reference/cli/supabase-inspect-db-bloat)
|
||||
- [Show statistics related to vacuum operations](https://supabase.com/docs/reference/cli/supabase-inspect-db-vacuum-stats)
|
||||
</div>
|
||||
</details>
|
||||
|
||||
## Easier backups
|
||||
|
||||

|
||||
|
||||
We’ve made it even easer to backup and migrate your database, using `supabase db dump`. Under the hood, this simply uses [pg_dump](https://www.postgresql.org/docs/current/app-pgdump.html) (it's just Postgres, after all). However we also handle a few of the hairy issues that you might need to navigate on your own, like object permissions.
|
||||
|
||||
<details>
|
||||
<summary>See full command</summary>
|
||||
<div>
|
||||
|
||||
{/* prettier-ignore */}
|
||||
```markdown
|
||||
supabase db dump --help
|
||||
Dumps data or schemas from the remote database
|
||||
|
||||
Usage:
|
||||
supabase db dump [flags]
|
||||
|
||||
Flags:
|
||||
--data-only Dumps only data records.
|
||||
-f, --file string File path to save the dumped contents.
|
||||
--keep-comments Keeps commented lines from pg_dump output.
|
||||
--role-only Dumps only cluster roles.
|
||||
--use-copy Uses copy statements in place of inserts.
|
||||
```
|
||||
|
||||
</div>
|
||||
</details>
|
||||
|
||||
## Improved Database Migrations
|
||||
|
||||

|
||||
|
||||
We’ve extended the CLI migration feature and added Dashboard support. Database migrations give you a way to update your database using version-controlled SQL files. We’ve built a lot of tooling around our migrations, including [reparation](https://supabase.com/docs/reference/cli/supabase-migration-repair), migration cleanup using the [squash](https://supabase.com/docs/reference/cli/supabase-migration-squash) command, and [diffing](https://supabase.com/docs/reference/cli/supabase-db-diff) (using [migra](https://github.com/djrobstep/migra)) to generate a new migration or to detect schema drift.
|
||||
|
||||
With the new Postgres Language Server, we hope to make it as easy to write Postgres migrations as it is to develop applications in TypeScript, Go, Python, or Rust.
|
||||
|
||||
Finally, we’ve added a Migrations view [in the dashboard](https://app.supabase.com/project/_/database/migrations) to track your migration history to improve the discoverability of migrations.
|
||||
|
||||
<details>
|
||||
<summary>See full command</summary>
|
||||
<div>
|
||||
{/* prettier-ignore */}
|
||||
```markdown
|
||||
supabase migration
|
||||
Manage database migration scripts
|
||||
|
||||
Usage:
|
||||
supabase migration [command]
|
||||
|
||||
Available Commands:
|
||||
list List local and remote migrations
|
||||
new Create an empty migration script
|
||||
repair Repair the migration history table
|
||||
squash Squash migrations to a single file
|
||||
up Apply pending migrations to local database
|
||||
```
|
||||
|
||||
</div>
|
||||
</details>
|
||||
|
||||
## Test and lint your database
|
||||
|
||||

|
||||
|
||||
We’ve simplified the database testing experience, with `supabase test`. Runnning `supabase test new` stubs out a [pgTAP test](https://pgtap.org/) for you to fill with testing logic. The CLI includes [pg_prove and the TAP harness](https://pgtap.org/pg_prove), so all you need to do is run `supabase test db`.
|
||||
|
||||
To make life even easier, our friends at [Basejump](https://usebasejump.com/) have created an entire suite of [Supabase Test Helpers](https://github.com/usebasejump/supabase-test-helpers) which make it simple to create users, run tests as an [authenticated user](https://usebasejump.com/blog/testing-on-supabase-with-pgtap#testing-authenticated), and test your [RLS policies](https://usebasejump.com/blog/testing-on-supabase-with-pgtap#rls-testing).
|
||||
|
||||
Finally, while you wait for us to make progress on the Language Server, we’ve added [support for linting](https://supabase.com/docs/guides/cli/testing-and-linting#linting-your-database) through the excellent [plpgsql_check](https://github.com/okbob/plpgsql_check) extension.
|
||||
|
||||
<details>
|
||||
<summary>See full command</summary>
|
||||
<div>
|
||||
|
||||
{/* prettier-ignore */}
|
||||
```markdown
|
||||
supabase test
|
||||
Run tests on local Supabase containers
|
||||
|
||||
Usage:
|
||||
supabase test [command]
|
||||
|
||||
Available Commands:
|
||||
db Tests local database with pgTAP
|
||||
new Create a new test file
|
||||
````
|
||||
|
||||
{/* prettier-ignore */}
|
||||
```markdown
|
||||
supabase db lint
|
||||
Checks local database for typing error
|
||||
|
||||
Usage:
|
||||
supabase db lint [flags]
|
||||
|
||||
Flags:
|
||||
-h, --help help for lint
|
||||
--level [ warning | error ] Error level to emit. (default warning)
|
||||
--linked Lints the linked project for schema errors.
|
||||
-s, --schema strings List of schema to include. (default all)
|
||||
```
|
||||
|
||||
</div>
|
||||
</details>
|
||||
|
||||
## Database seeding
|
||||
|
||||

|
||||
|
||||
Seeding is the process of populating a database with initial data, typically used to provide sample or default records for testing and development purposes. This gives you a reproducible development environment across your entire team.
|
||||
|
||||
We’ve added [support for seeding](https://supabase.com/docs/guides/cli/seeding-your-database) to populate your local databases with data whenever you run `supabase start` or `supabase db reset`.
|
||||
|
||||
We’ve also worked with our friends at Snaplet to [generate seed data](https://supabase.com/docs/guides/cli/seeding-your-database#generating-seed-data) directly from your database:
|
||||
|
||||
```markdown
|
||||
npx snaplet generate --sql > supabase/seed.sql
|
||||
```
|
||||
|
||||
## Type generators
|
||||
|
||||

|
||||
|
||||
Type generators introspect a PostgreSQL schema and automatically generate TypeScript definitions. This gives you [end-to-end type safety](https://www.youtube.com/watch?v=VSNgAIObBdw) from the database to the browser.
|
||||
|
||||
In the past month, we've added relationship detection in supabase-js. Foreign keys are now included in the generated types so that supabase-js can detect whether a foreign table should be an array (one-to-many) or an object (many-to-one). We've also added Helper Types to improve the developer experience for common scenarios, like short-hand accessors:
|
||||
|
||||
```tsx
|
||||
// Before
|
||||
let movie: Database['public']['Tables']['movies']['Row'] = // ...
|
||||
|
||||
// After
|
||||
let movie: Tables<'movies'> = // ...
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>See full command</summary>
|
||||
<div>
|
||||
|
||||
{/* prettier-ignore */}
|
||||
```markdown
|
||||
supabase gen types
|
||||
Generate types from Postgres schema
|
||||
|
||||
Usage:
|
||||
supabase gen types [command]
|
||||
|
||||
Available Commands:
|
||||
typescript Generate types for TypeScript
|
||||
```
|
||||
|
||||
</div>
|
||||
</details>
|
||||
|
||||
## Official GitHub Action
|
||||
|
||||

|
||||
|
||||
We’ve developed an official [GitHub Action](https://github.com/marketplace/actions/supabase-cli-action) which leverages the CLI. You can [generate types on every PR](https://supabase.com/docs/guides/cli/github-action/generating-types), or run [your tests on every commit](https://supabase.com/docs/guides/cli/github-action/testing).
|
||||
|
||||
## Local Logging and Debugging
|
||||
|
||||
Logs are now accessible locally in the Dashboard. Last launch week we released an open source logging server, with support for BigQuery. In the past few months we’ve added Postgres support to this server. This means that all of your local logs are accessible with no additional config - simply run supabase start and then visit the local dashboard to start debugging.
|
||||
|
||||

|
||||
|
||||
## Stable releases
|
||||
|
||||
We’ve moved the Supabase CLI to a fortnightly stable-release cycle. Every 2 weeks, we will update the [`latest`](https://www.npmjs.com/package/supabase?activeTab=versions) tag on npm, the [`supabase/tap`](https://github.com/supabase/homebrew-tap/blob/main/supabase.rb) for homebrew, and the [`supabase`](https://github.com/supabase/homebrew-tap/blob/main/supabase.rb) scoop bucket. You can find the binary downloads in our GitHub [latest release](https://github.com/supabase/cli/releases/latest).
|
||||
|
||||
For the adventurous feature hunters, we’ve added a `beta` release channel for the CLI, with new releases on every PR merged. You can follow [this guide](https://github.com/supabase/cli#install-the-cli) to install Supabase CLI (beta).
|
||||
|
||||
## Branching and Preview Environments
|
||||
|
||||
And finally, probably our most anticipated feature - branching:
|
||||
|
||||

|
||||
|
||||
We’ve made major improvements to our local development with the features above - but we have bigger ambitions. For several months we’ve been developing Supabase branching and today we're opening it up for alpha testers.
|
||||
|
||||
Supabase isn’t simply a database, it’s an entire backend - everything from your Postgres database to your [50GB videos](https://supabase.com/blog/storage-v3-resumable-uploads). Branching improves the experience of managing environments so that developers and teams spend less time on DevOps and more time building.
|
||||
|
||||
### Supabase branching is hard
|
||||
|
||||
Every project is a Postgres database, wrapped in a suite of tools like [Auth](https://supabase.com/auth), [Storage](https://supabase.com/storage), [Edge Functions](https://supabase.com/edge-functions), [Realtime](https://supabase.com/realtime) and [Vectors](https://supabase.com/vector), and encompassed by [API middleware](https://supabase.com/docs/guides/api) and [logs](https://supabase.com/blog/supabase-logs-self-hosted).
|
||||
|
||||
A good branching solution requires each tool to provide multi-tenancy support so that:
|
||||
|
||||
1. Data can be isolated from production for security.
|
||||
2. Compute can be isolated from each other to avoid noisy-neighbors.
|
||||
|
||||
### How does branching work?
|
||||
|
||||
We use Git to bridge the gap between your local development environment and your hosted database. For now, we’ve focused on GitHub.
|
||||
|
||||
Every time you open a new Pull Request on GitHub, a corresponding “Preview Environment” is created. Each preview branch is an isolated Firecracker instance that pauses automatically after a period of inactivity. Every time a change is pushed to GitHub, the migrations within the `./supabase/migrations` folder are run against the Preview Branch so that your entire team is working from the same source of truth.
|
||||
|
||||
When you hit merge on your Pull Request we run the migrations on your Production database.
|
||||
|
||||
### What about data?
|
||||
|
||||
We’re starting with seed data. Any SQL with `./supabase/seed.sql` will populate your Preview Branch. This provides your entire team with an isolated and reproducible environment, safe from any data privacy concerns.
|
||||
|
||||
Importantly, we _aren’t_ cloning production data until we find something appropriate for data security. We know that copy-on-write is an available option, and with the appropriate anonymization techniques it seems like a promising way to provide a “production-like” test environment.
|
||||
|
||||
We’ll also need to figure out what this means for large files in Supabase Storage. Do you need to anonymize your photos and videos? This is a work in progress and we’re open to feedback.
|
||||
|
||||
Either way, we want to support _both_ seed data and anonymized production data, so that teams can choose their preference based on their risk profile. It makes sense to start with a seed.
|
||||
|
||||
### Is it available yet?
|
||||
|
||||
For the next few months branching is in closed alpha. We’re looking for development partners for Supabase Branching. If you’re interested in testing the new features, [sign up for early access](https://forms.supabase.com/branching-request).
|
||||
|
||||
## Get started
|
||||
|
||||
Jump into our updated [Local Development documentation](https://supabase.com/docs/guides/cli) to get started with the CLI.
|
||||
|
||||
If you’re an existing user simply [update your CLI](https://supabase.com/docs/guides/cli/getting-started#updating-the-supabase-cli) and check out the [full command reference](https://supabase.com/docs/reference/cli/introduction) for all the latest commands.
|
||||
|
||||
## More Launch Week 8
|
||||
|
||||
- [Hugging Face is now supported in Supabase](https://supabase.com/blog/hugging-face-supabase)
|
||||
- [Launch Week 8](https://supabase.com/launch-week)
|
||||
- [Coding the stars - an interactive constellation with Three.js and React Three Fiber](https://supabase.com/blog/interactive-constellation-threejs-react-three-fiber)
|
||||
- [Why we'll stay remote](https://supabase.com/blog/why-supabase-remote)
|
||||
- [Postgres Language Server](https://github.com/supabase/postgres_lsp)
|
||||
|
After Width: | Height: | Size: 466 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 488 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 877 KiB |
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 436 KiB |
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 395 KiB |
@@ -5,35 +5,35 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Angelico de los Reyes at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 03:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 23:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-angelico_de_los_reyes-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgres-point-in-time-recovery</guid>
|
||||
<title>Point in Time Recovery is now available for Pro projects</title>
|
||||
<link>https://supabase.com/blog/postgres-point-in-time-recovery</link>
|
||||
<description>We're making PITR available for more projects, with a new Dashboard UI that makes it simple to use.</description>
|
||||
<pubDate>Thu, 15 Dec 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 15 Dec 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/continuous-postgresql-backup-walg</guid>
|
||||
<title>Continuous PostgreSQL Backups using WAL-G</title>
|
||||
<link>https://supabase.com/blog/continuous-postgresql-backup-walg</link>
|
||||
<description>Have you ever wanted to restore your database's state to a particular moment in time? This post explains how, using WAL-G.</description>
|
||||
<pubDate>Sun, 02 Aug 2020 02:30:00 GMT</pubDate>
|
||||
<pubDate>Sat, 01 Aug 2020 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgresql-templates</guid>
|
||||
<title>What are PostgreSQL Templates?</title>
|
||||
<link>https://supabase.com/blog/postgresql-templates</link>
|
||||
<description>What are PostgreSQL templates and what are they used for?</description>
|
||||
<pubDate>Thu, 09 Jul 2020 02:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 08 Jul 2020 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgresql-physical-logical-backups</guid>
|
||||
<title>Physical vs Logical Backups in PostgreSQL</title>
|
||||
<link>https://supabase.com/blog/postgresql-physical-logical-backups</link>
|
||||
<description>What are physical and logical backups in Postgres?</description>
|
||||
<pubDate>Tue, 07 Jul 2020 02:30:00 GMT</pubDate>
|
||||
<pubDate>Mon, 06 Jul 2020 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Ant Wilson at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Sat, 27 Feb 2021 03:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Fri, 26 Feb 2021 23:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-ant_wilson-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/cracking-postgres-interview</guid>
|
||||
<title>Cracking PostgreSQL Interview Questions</title>
|
||||
<link>https://supabase.com/blog/cracking-postgres-interview</link>
|
||||
<description>Understand the top PostgreSQL Interview Questions</description>
|
||||
<pubDate>Sat, 27 Feb 2021 03:30:00 GMT</pubDate>
|
||||
<pubDate>Fri, 26 Feb 2021 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Bo Lu at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Wed, 14 Dec 2022 03:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Wed, 14 Dec 2022 23:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-bo_lu-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgres-foreign-data-wrappers-rust</guid>
|
||||
<title>Supabase Wrappers, a Postgres FDW framework written in Rust</title>
|
||||
<link>https://supabase.com/blog/postgres-foreign-data-wrappers-rust</link>
|
||||
<description>A framework for building Postgres Foreign Data Wrappers which connects to Stripe, Firebase, Clickhouse, and more.</description>
|
||||
<pubDate>Wed, 14 Dec 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 14 Dec 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,21 +5,21 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Mark Burggraf at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Wed, 23 Nov 2022 03:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Wed, 23 Nov 2022 23:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-burggraf-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/sql-or-nosql-both-with-postgresql</guid>
|
||||
<title>SQL or NoSQL? Why not use both (with PostgreSQL)?</title>
|
||||
<link>https://supabase.com/blog/sql-or-nosql-both-with-postgresql</link>
|
||||
<description>How to turn Postgres into an easy-to-use NoSQL database that retains all the power of SQL</description>
|
||||
<pubDate>Wed, 23 Nov 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 23 Nov 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgres-wasm</guid>
|
||||
<title>Postgres WASM by Snaplet and Supabase</title>
|
||||
<link>https://supabase.com/blog/postgres-wasm</link>
|
||||
<description>We're open sourcing postgres-wasm, a PostgresQL server that runs inside a browser, with our friends at Snaplet.</description>
|
||||
<pubDate>Sun, 02 Oct 2022 02:30:00 GMT</pubDate>
|
||||
<pubDate>Sun, 02 Oct 2022 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,21 +5,21 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Egor Romanov at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Wed, 02 Aug 2023 02:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Wed, 02 Aug 2023 22:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-egor_romanov-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/fewer-dimensions-are-better-pgvector</guid>
|
||||
<title>pgvector: Fewer dimensions are better</title>
|
||||
<link>https://supabase.com/blog/fewer-dimensions-are-better-pgvector</link>
|
||||
<description>Increase performance in pgvector by using embedding vectors with fewer dimensions</description>
|
||||
<pubDate>Wed, 02 Aug 2023 02:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 02 Aug 2023 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/pgvector-performance</guid>
|
||||
<title>pgvector 0.4.0 performance</title>
|
||||
<link>https://supabase.com/blog/pgvector-performance</link>
|
||||
<description>There's been lot of talk about pgvector performance lately, so we took some datasets and pushed pgvector to the limits to find out its strengths and limitations.</description>
|
||||
<pubDate>Wed, 12 Jul 2023 02:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 12 Jul 2023 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,21 +5,21 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Greg Richardson at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Wed, 02 Aug 2023 02:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Wed, 02 Aug 2023 22:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-gregnr-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/fewer-dimensions-are-better-pgvector</guid>
|
||||
<title>pgvector: Fewer dimensions are better</title>
|
||||
<link>https://supabase.com/blog/fewer-dimensions-are-better-pgvector</link>
|
||||
<description>Increase performance in pgvector by using embedding vectors with fewer dimensions</description>
|
||||
<pubDate>Wed, 02 Aug 2023 02:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 02 Aug 2023 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/openai-embeddings-postgres-vector</guid>
|
||||
<title>Storing OpenAI embeddings in Postgres with pgvector</title>
|
||||
<link>https://supabase.com/blog/openai-embeddings-postgres-vector</link>
|
||||
<description>An example of how to build an AI-powered search engine using OpenAI's embeddings and PostgreSQL.</description>
|
||||
<pubDate>Sun, 05 Feb 2023 03:30:00 GMT</pubDate>
|
||||
<pubDate>Sun, 05 Feb 2023 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,21 +5,21 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Michel Pelletier at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 03:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 23:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-michel-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/vault-now-in-beta</guid>
|
||||
<title>Supabase Vault is now in Beta</title>
|
||||
<link>https://supabase.com/blog/vault-now-in-beta</link>
|
||||
<description>A Postgres extension to store encrypted secrets and encrypt data.</description>
|
||||
<pubDate>Thu, 15 Dec 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 15 Dec 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/transparent-column-encryption-with-postgres</guid>
|
||||
<title>Transparent Column Encryption with Postgres</title>
|
||||
<link>https://supabase.com/blog/transparent-column-encryption-with-postgres</link>
|
||||
<description>Using pgsodium's Transparent Column Encryption to encrypt data and provide your users with row-level encryption.</description>
|
||||
<pubDate>Wed, 30 Nov 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 30 Nov 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,56 +5,56 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Oliver Rice at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Wed, 02 Aug 2023 02:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Wed, 02 Aug 2023 22:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-oli_rice-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/fewer-dimensions-are-better-pgvector</guid>
|
||||
<title>pgvector: Fewer dimensions are better</title>
|
||||
<link>https://supabase.com/blog/fewer-dimensions-are-better-pgvector</link>
|
||||
<description>Increase performance in pgvector by using embedding vectors with fewer dimensions</description>
|
||||
<pubDate>Wed, 02 Aug 2023 02:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 02 Aug 2023 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/whats-new-in-pg-graphql-v1-2</guid>
|
||||
<title>What's New in pg_graphql v1.2</title>
|
||||
<link>https://supabase.com/blog/whats-new-in-pg-graphql-v1-2</link>
|
||||
<description>New Features in the v1.2 release of pg_graphql</description>
|
||||
<pubDate>Thu, 20 Apr 2023 02:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 20 Apr 2023 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/type-constraints-in-65-lines-of-sql</guid>
|
||||
<title>Type Constraints in 65 lines of SQL</title>
|
||||
<link>https://supabase.com/blog/type-constraints-in-65-lines-of-sql</link>
|
||||
<description>Creating validated data types in Postgres</description>
|
||||
<pubDate>Thu, 16 Feb 2023 03:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 16 Feb 2023 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/pg-graphql-v1</guid>
|
||||
<title>pg_graphql v1.0</title>
|
||||
<link>https://supabase.com/blog/pg-graphql-v1</link>
|
||||
<description>Announcing the v1.0 release of pg_graphql</description>
|
||||
<pubDate>Thu, 15 Dec 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 15 Dec 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgres-foreign-data-wrappers-rust</guid>
|
||||
<title>Supabase Wrappers, a Postgres FDW framework written in Rust</title>
|
||||
<link>https://supabase.com/blog/postgres-foreign-data-wrappers-rust</link>
|
||||
<description>A framework for building Postgres Foreign Data Wrappers which connects to Stripe, Firebase, Clickhouse, and more.</description>
|
||||
<pubDate>Wed, 14 Dec 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 14 Dec 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/pg-jsonschema-a-postgres-extension-for-json-validation</guid>
|
||||
<title>pg_jsonschema: JSON Schema support for Postgres</title>
|
||||
<link>https://supabase.com/blog/pg-jsonschema-a-postgres-extension-for-json-validation</link>
|
||||
<description>Today we're releasing pg_jsonschema, a Postgres extension for JSON validation.</description>
|
||||
<pubDate>Thu, 18 Aug 2022 02:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 18 Aug 2022 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgres-audit</guid>
|
||||
<title>Postgres Auditing in 150 lines of SQL</title>
|
||||
<link>https://supabase.com/blog/postgres-audit</link>
|
||||
<description>PostgreSQL has a robust set of features which we can leverage to create a generic auditing solution in 150 lines of SQL.</description>
|
||||
<pubDate>Mon, 07 Mar 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Mon, 07 Mar 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,49 +5,49 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Paul Copplestone at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Sun, 30 Apr 2023 02:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Sun, 30 Apr 2023 22:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-paul_copplestone-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgres-pluggable-strorage</guid>
|
||||
<title>Next steps for Postgres pluggable storage</title>
|
||||
<link>https://supabase.com/blog/postgres-pluggable-strorage</link>
|
||||
<description>Exploring history of Postgres pluggable storage and the possibility of landing it in the Postgres core.</description>
|
||||
<pubDate>Sun, 30 Apr 2023 02:30:00 GMT</pubDate>
|
||||
<pubDate>Sun, 30 Apr 2023 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgres-foreign-data-wrappers-rust</guid>
|
||||
<title>Supabase Wrappers, a Postgres FDW framework written in Rust</title>
|
||||
<link>https://supabase.com/blog/postgres-foreign-data-wrappers-rust</link>
|
||||
<description>A framework for building Postgres Foreign Data Wrappers which connects to Stripe, Firebase, Clickhouse, and more.</description>
|
||||
<pubDate>Wed, 14 Dec 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 14 Dec 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgres-crdt</guid>
|
||||
<title>pg_crdt - an experimental CRDT extension for Postgres</title>
|
||||
<link>https://supabase.com/blog/postgres-crdt</link>
|
||||
<description>Embedding Yjs and Automerge into Postgres for collaborative applications.</description>
|
||||
<pubDate>Fri, 09 Dec 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Fri, 09 Dec 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/partial-postgresql-data-dumps-with-rls</guid>
|
||||
<title>Partial data dumps using Postgres Row Level Security</title>
|
||||
<link>https://supabase.com/blog/partial-postgresql-data-dumps-with-rls</link>
|
||||
<description>Using RLS to create seed files for local PostgreSQL testing.</description>
|
||||
<pubDate>Mon, 27 Jun 2022 02:30:00 GMT</pubDate>
|
||||
<pubDate>Mon, 27 Jun 2022 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgres-as-a-cron-server</guid>
|
||||
<title>Postgres as a CRON Server</title>
|
||||
<link>https://supabase.com/blog/postgres-as-a-cron-server</link>
|
||||
<description>Running repetitive tasks with your Postgres database.</description>
|
||||
<pubDate>Fri, 05 Mar 2021 03:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 04 Mar 2021 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgresql-views</guid>
|
||||
<title>Postgres Views</title>
|
||||
<link>https://supabase.com/blog/postgresql-views</link>
|
||||
<description>Creating and using a view in PostgreSQL.</description>
|
||||
<pubDate>Wed, 18 Nov 2020 03:30:00 GMT</pubDate>
|
||||
<pubDate>Tue, 17 Nov 2020 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,28 +5,28 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Pavel Borisov at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Wed, 12 Jul 2023 02:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Wed, 12 Jul 2023 22:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-pavel-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/pgvector-performance</guid>
|
||||
<title>pgvector 0.4.0 performance</title>
|
||||
<link>https://supabase.com/blog/pgvector-performance</link>
|
||||
<description>There's been lot of talk about pgvector performance lately, so we took some datasets and pushed pgvector to the limits to find out its strengths and limitations.</description>
|
||||
<pubDate>Wed, 12 Jul 2023 02:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 12 Jul 2023 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/new-in-postgres-15</guid>
|
||||
<title>What's new in Postgres 15?</title>
|
||||
<link>https://supabase.com/blog/new-in-postgres-15</link>
|
||||
<description>Describes the release of Postgres 15, new features and reasons to use it</description>
|
||||
<pubDate>Thu, 15 Dec 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 15 Dec 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgresql-commitfest</guid>
|
||||
<title>What is PostgreSQL commitfest and how to contribute</title>
|
||||
<link>https://supabase.com/blog/postgresql-commitfest</link>
|
||||
<description>A time-tested method for contributing to the core Postgres code</description>
|
||||
<pubDate>Wed, 26 Oct 2022 02:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 26 Oct 2022 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,21 +5,21 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Steve Chavez at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 03:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 23:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-steve_chavez-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgrest-11-prerelease</guid>
|
||||
<title>PostgREST 11 pre-release</title>
|
||||
<link>https://supabase.com/blog/postgrest-11-prerelease</link>
|
||||
<description>Describes new features of PostgREST 11 pre-release</description>
|
||||
<pubDate>Thu, 15 Dec 2022 03:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 15 Dec 2022 23:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/roles-postgres-hooks</guid>
|
||||
<title>Protecting reserved roles with PostgreSQL Hooks</title>
|
||||
<link>https://supabase.com/blog/roles-postgres-hooks</link>
|
||||
<description>Using Postgres Hooks to protect functionality in your Postgres database.</description>
|
||||
<pubDate>Thu, 01 Jul 2021 02:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 01 Jul 2021 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,28 +5,28 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Victor at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Thu, 13 Oct 2022 02:30:00 GMT</lastBuildDate>
|
||||
<lastBuildDate>Thu, 13 Oct 2022 22:00:00 GMT</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-victor-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/postgres-full-text-search-vs-the-rest</guid>
|
||||
<title>Postgres Full Text Search vs the rest</title>
|
||||
<link>https://supabase.com/blog/postgres-full-text-search-vs-the-rest</link>
|
||||
<description>Comparing one of the most popular Postgres features against alternatives</description>
|
||||
<pubDate>Thu, 13 Oct 2022 02:30:00 GMT</pubDate>
|
||||
<pubDate>Thu, 13 Oct 2022 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/choosing-a-postgres-primary-key</guid>
|
||||
<title>Choosing a Postgres Primary Key</title>
|
||||
<link>https://supabase.com/blog/choosing-a-postgres-primary-key</link>
|
||||
<description>Turns out the question of which identifier to use as a Primary Key is complicated -- we're going to dive into some of the complexity and inherent trade-offs, and figure things out</description>
|
||||
<pubDate>Wed, 07 Sep 2022 02:30:00 GMT</pubDate>
|
||||
<pubDate>Wed, 07 Sep 2022 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/seen-by-in-postgresql</guid>
|
||||
<title>Implementing "seen by" functionality with Postgres</title>
|
||||
<link>https://supabase.com/blog/seen-by-in-postgresql</link>
|
||||
<description>Different approaches for tracking visitor counts with PostgreSQL.</description>
|
||||
<pubDate>Sun, 17 Jul 2022 02:30:00 GMT</pubDate>
|
||||
<pubDate>Sun, 17 Jul 2022 22:00:00 GMT</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||