mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 17:35:10 +03:00
Merge branch 'lw7/day-5' of github.com:supabase/supabase into lw7/day-5
This commit is contained in:
commit
61998d3daf
18 files changed
+290
-278
No files matched your search
@@ -1,21 +1,25 @@
|
||||
---
|
||||
title: 'dbdev: PostgreSQL Package Manager'
|
||||
description: We're publicly previewing dbdev, a PostgreSQL package manager.
|
||||
description: We're publicly previewing dbdev, a PostgreSQL package manager.
|
||||
launchweek: 7
|
||||
tags:
|
||||
- launch-week
|
||||
- postgres
|
||||
- postgres
|
||||
date: '2023-04-14'
|
||||
published_at: '2023-04-14T08:00:00.000-07:00'
|
||||
toc_depth: 3
|
||||
author: oli_rice
|
||||
image: launch-week-7/day-5-one-more-thing/day-5-dbdev-og.jpg
|
||||
thumb: launch-week-7/day-5-one-more-thing/day-5-dbdev-thumb.jpg
|
||||
|
||||
thumb: launch-week-7/day-5-one-more-thing/day-5-dbdev-thumb.jpg
|
||||
---
|
||||
|
||||
Today we’re publicly previewing [**`database.dev`**](https://database.dev), a PostgreSQL package manager. At this stage the package registry is read-only. We've preloaded it with a handful of packages, or pglets (PostGres appLETs), to showcase some of the more interesting possibilities.
|
||||
Today we’re publicly previewing [**`database.dev`**](https://database.dev), a PostgreSQL package manager. At this stage the package registry is read-only. We've preloaded it with a handful of packages, or pglets (PostGres appLETs), to showcase some of the more interesting possibilities.
|
||||
|
||||
<Img src="/images/blog/launch-week-7/day-5-one-more-thing/dbdev-landing.png" wide={true} alt="db dev landing page"/>
|
||||
<Img
|
||||
src="/images/blog/launch-week-7/day-5-one-more-thing/dbdev-landing.png"
|
||||
wide={true}
|
||||
alt="db dev landing page"
|
||||
/>
|
||||
|
||||
`dbdev` fills the same role for PostgreSQL as `npm` for JavaScript, `pip` for Python and `cargo` for Rust in that it enables publishing libraries and applications for repeatable deployment. We'll be releasing the tooling necessary for third-parties to publish `pglets` to the registry once we’ve collected some community feedback and incorporate any great new ideas. Our goal is to create an [open ecosystem](https://github.com/supabase/dbdev) for packaging and discovering SQL.
|
||||
|
||||
@@ -29,11 +33,11 @@ Once the `dbdev` client is present, `pglet`s can be installed from the registry
|
||||
|
||||
```sql
|
||||
-- Load the package from the package index
|
||||
select dbdev.install('olirice-asciiplot');
|
||||
select
|
||||
dbdev.install ('olirice-asciiplot');
|
||||
|
||||
-- Enable the extension
|
||||
create extension "olirice-asciiplot"
|
||||
version '0.2.1';
|
||||
create extension "olirice-asciiplot" version '0.2.1';
|
||||
```
|
||||
|
||||
You can explore all available `pglet`s on [database.dev](https://database.dev).
|
||||
@@ -46,7 +50,7 @@ With our extension installed, you can use it like any other PostgreSQL extension
|
||||
select
|
||||
scatter(
|
||||
val::numeric, -- x
|
||||
val::numeric, -- y
|
||||
val::numeric, -- y
|
||||
'stonks!', -- title
|
||||
15, -- height
|
||||
50 -- width
|
||||
@@ -57,18 +61,18 @@ from
|
||||
stonks!
|
||||
----------------------------------------------
|
||||
| *
|
||||
|
|
||||
| *
|
||||
| *
|
||||
|
|
||||
| *
|
||||
|
|
||||
| *
|
||||
| *
|
||||
|
|
||||
| *
|
||||
|
|
||||
| *
|
||||
|
|
||||
| *
|
||||
| *
|
||||
|
|
||||
| *
|
||||
|
|
||||
| *
|
||||
| *
|
||||
|
|
||||
| *
|
||||
|
|
||||
| *
|
||||
| *
|
||||
*/
|
||||
```
|
||||
@@ -86,7 +90,7 @@ Two common challenges faced by package indexes are name squatting and typo squat
|
||||
- Name squatting: reserving names for future use
|
||||
- Typo squatting: reserving misspelling of existing package
|
||||
|
||||
The ethics of name squatting get dicey at scale while typo squatting is widely viewed as malicious behavior. To mitigate both issues, all `pglet`s published to [database.dev](https://database.dev) are namespaced to their owning organization or user’s handle. For example a `pglet` named [`olirice-index_advisor`](https://database.dev/olirice/index_advisor) was created by the account `olirice` under the name `index_advisor`. If another user, `some_user`, forks and republishes the project, it would be available under `some_user-index_advisor`. Problem solved ✅
|
||||
The ethics of name squatting get dicey at scale while typo squatting is widely viewed as malicious behavior. To mitigate both issues, all `pglet`s published to [database.dev](https://database.dev) are namespaced to their owning organization or user’s handle. For example a `pglet` named [`olirice-index_advisor`](https://database.dev/olirice/index_advisor) was created by the account `olirice` under the name `index_advisor`. If another user, `some_user`, forks and republishes the project, it would be available under `some_user-index_advisor`. Problem solved ✅
|
||||
|
||||
## Running on Supabase
|
||||
|
||||
@@ -94,50 +98,51 @@ The ethics of name squatting get dicey at scale while typo squatting is widely v
|
||||
|
||||
Supabase reflects APIs directly from your database’s structure, so a `pglet` can contain an entire stateful application, pre-configured with authentication, REST, GraphQL, and realtime change data capture all baked in!
|
||||
|
||||
For example, our friends at [LangChain](https://python.langchain.com/en/latest/index.html) published a Supabase backend for their docs search tool that uses a hybrid of document embeddings and full text search to find relevant documents for a user’s query
|
||||
For example, our friends at [LangChain](https://python.langchain.com/en/latest/index.html) published a Supabase backend for their docs search tool that uses a hybrid of document embeddings and full text search to find relevant documents for a user’s query
|
||||
|
||||
Its available at [`langchain-hybrid_search`](https://database.dev/langchain/hybrid_search) and here’s how you’d set it up:
|
||||
|
||||
```sql
|
||||
select dbdev.install('langchain-hybrid_search');
|
||||
select
|
||||
dbdev.install ('langchain-hybrid_search');
|
||||
|
||||
create extension if not exists vector;
|
||||
create extension "langchain-hybrid_search"
|
||||
schema public
|
||||
version '1.0.0';
|
||||
|
||||
create extension "langchain-hybrid_search" schema public version '1.0.0';
|
||||
```
|
||||
|
||||
That creates the relevant `documents` table and associated search functions. Then, you can immediately hit it from your front end for best-in-class document search.
|
||||
|
||||
```jsx
|
||||
import { OpenAIEmbeddings } from "langchain/embeddings/openai";
|
||||
import { createClient } from "@supabase/supabase-js";
|
||||
import { SupabaseHybridSearch } from "langchain/retrievers/supabase";
|
||||
import { OpenAIEmbeddings } from 'langchain/embeddings/openai'
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
import { SupabaseHybridSearch } from 'langchain/retrievers/supabase'
|
||||
|
||||
const privateKey = process.env.SUPABASE_PRIVATE_KEY;
|
||||
if (!privateKey) throw new Error(`Expected env var SUPABASE_PRIVATE_KEY`);
|
||||
const privateKey = process.env.SUPABASE_PRIVATE_KEY
|
||||
if (!privateKey) throw new Error(`Expected env var SUPABASE_PRIVATE_KEY`)
|
||||
|
||||
const url = process.env.SUPABASE_URL;
|
||||
if (!url) throw new Error(`Expected env var SUPABASE_URL`);
|
||||
const url = process.env.SUPABASE_URL
|
||||
if (!url) throw new Error(`Expected env var SUPABASE_URL`)
|
||||
|
||||
export const run = async () => {
|
||||
const client = createClient(url, privateKey);
|
||||
const client = createClient(url, privateKey)
|
||||
|
||||
const embeddings = new OpenAIEmbeddings();
|
||||
const embeddings = new OpenAIEmbeddings()
|
||||
|
||||
const retriever = new SupabaseHybridSearch(embeddings, {
|
||||
client,
|
||||
// Below are the defaults, expecting that you set up your supabase table and functions according to the guide above. Please change if necessary.
|
||||
similarityK: 2,
|
||||
keywordK: 2,
|
||||
tableName: "documents",
|
||||
similarityQueryName: "match_documents",
|
||||
keywordQueryName: "kw_match_documents",
|
||||
});
|
||||
tableName: 'documents',
|
||||
similarityQueryName: 'match_documents',
|
||||
keywordQueryName: 'kw_match_documents',
|
||||
})
|
||||
|
||||
const results = await retriever.getRelevantDocuments("hello bye");
|
||||
const results = await retriever.getRelevantDocuments('hello bye')
|
||||
|
||||
console.log(results);
|
||||
};
|
||||
console.log(results)
|
||||
}
|
||||
```
|
||||
|
||||
## Package Highlights
|
||||
@@ -158,11 +163,11 @@ For example, you could apply a deny listing to your API using `hdr.in_deny_list(
|
||||
|
||||
```sql
|
||||
select
|
||||
*
|
||||
*
|
||||
from
|
||||
app.memos
|
||||
app.memos
|
||||
where
|
||||
not hdr.in_deny_list();
|
||||
not hdr.in_deny_list ();
|
||||
```
|
||||
|
||||
### olirice-index_advisor
|
||||
@@ -193,7 +198,7 @@ which shows
|
||||
|
||||
```markdown
|
||||
| startup_cost_before | startup_cost_after | total_cost_before | total_cost_after | index_statements |
|
||||
|---------------------|--------------------|-------------------|------------------|-------------------------------------------------------|
|
||||
| ------------------- | ------------------ | ----------------- | ---------------- | ----------------------------------------------------- |
|
||||
| 0.00 | 1.17 | 25.88 | 6.40 | {"CREATE INDEX ON public.account USING btree (name)"} |
|
||||
```
|
||||
|
||||
@@ -209,8 +214,8 @@ Keep an eye open for it in Launch Week 8.
|
||||
|
||||
For example, to identify potentially unused indexes that can be dropped, you could use the `index_usage` view, which has columns for:
|
||||
|
||||
| Column | Type |
|
||||
|-----------------|--------|
|
||||
| Column | Type |
|
||||
| --------------- | ------ |
|
||||
| schemaname | name |
|
||||
| tablename | name |
|
||||
| num_rows | bigint |
|
||||
@@ -220,15 +225,15 @@ For example, to identify potentially unused indexes that can be dropped, you cou
|
||||
| unique | text |
|
||||
| number_of_scans | bigint |
|
||||
| tuples_read | bigint |
|
||||
| tuples_fetched | bigint |
|
||||
| tuples_fetched | bigint |
|
||||
|
||||
## Limitations
|
||||
|
||||
There are several procedural languages (PL) that can be embedded in PostgreSQL and used to define functions. The ones that ship with stock PostgreSQL are `SQL`, and `pl/pgSQL` but there others that can be installed separately, including `pl/v8` for JavaScript, or `pl/perl` for Perl. A **trusted** language has been restricted to remove potentially hazardous functionality like access to the network stack and file system. `pl/v8` and `pl/perl` are examples of trusted languages. In contrast, `pl/python3u` is **untrusted**.
|
||||
|
||||
A [Trusted Language Extension (TLE)](https://github.com/aws/pg_tle) is a [PostgreSQL extension](https://www.postgresql.org/docs/current/extend-extensions.html), written exclusively using trusted languages. In some ways that makes them less flexible than classic extensions, which can have C language components (more on that in a second). The advantage to TLEs is that they don't require direct access to the PostgreSQL server’s file system to install. That enables TLEs to be installed by end-users rather than by database administrators or hosting providers. TLEs are the enabling technology that allows a package manager like `dbdev` to function on hosted PostgreSQL platforms like Supabase.
|
||||
A [Trusted Language Extension (TLE)](https://github.com/aws/pg_tle) is a [PostgreSQL extension](https://www.postgresql.org/docs/current/extend-extensions.html), written exclusively using trusted languages. In some ways that makes them less flexible than classic extensions, which can have C language components (more on that in a second). The advantage to TLEs is that they don't require direct access to the PostgreSQL server’s file system to install. That enables TLEs to be installed by end-users rather than by database administrators or hosting providers. TLEs are the enabling technology that allows a package manager like `dbdev` to function on hosted PostgreSQL platforms like Supabase.
|
||||
|
||||
For a more in-depth explanation of Trusted Language Extensions checkout [AWS's pg_tle on Supabase blog post](https://aws.amazon.com/blogs/opensource/supabase-makes-extensions-easier-for-developers-with-trusted-language-extensions-for-postgresql/) or dive into the code at [github.com/aws/pg_tle](https://github.com/aws/pg_tle).
|
||||
For a more in-depth explanation of Trusted Language Extensions checkout [AWS's pg_tle on Supabase blog post](https://aws.amazon.com/blogs/opensource/supabase-makes-extensions-easier-for-developers-with-trusted-language-extensions-for-postgresql/) or dive into the code at [github.com/aws/pg_tle](https://github.com/aws/pg_tle).
|
||||
|
||||
A recent development in the PostgreSQL extension ecosystem is the 1.0 release of a new trusted language, [`pl/rust`](https://github.com/tcdi/plrust), allowing users to define SQL functions written in Rust. As a compiled language, `pl/rust` functions can execute an order of magnitude faster than `pl/pgSQL` for computationally heavy workloads. That closes the biggest capability gap between native extensions with C components and TLEs. `pl/rust` hasn’t released to Supabase yet, but we’re excited about rolling it out in the coming weeks.
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ launchweek: 7
|
||||
tags:
|
||||
- launch-week
|
||||
date: '2023-04-14'
|
||||
published_at: '2023-04-14T07:00:00.000-07:00'
|
||||
toc_depth: 3
|
||||
author: paul_copplestone
|
||||
image: launch-week-7/day-5-community-highlights/day-5-community-highlights-og.jpg
|
||||
|
||||
@@ -5,6 +5,7 @@ tags:
|
||||
- launch-week
|
||||
- postgres
|
||||
date: '2023-04-14'
|
||||
published_at: '2023-04-14T07:00:00.000-07:00'
|
||||
to_depth: 3
|
||||
author: michel,oli_rice
|
||||
image: launch-week-7/day-5-supabase-pg-tle/day-5-postgres-tle-thumb.jpg
|
||||
|
||||
@@ -5,6 +5,7 @@ tags:
|
||||
- launch-week
|
||||
- studio
|
||||
date: '2023-04-14'
|
||||
published_at: '2023-04-14T09:00:00.000-07:00'
|
||||
to_depth: 3
|
||||
author: alaister,joshenlim,jonny,saltcod
|
||||
image: launch-week-7/day-5-supabase-studio-2.0/day-5-supabase-studio-2.0-og.jpg
|
||||
|
||||
@@ -53,6 +53,7 @@ export const getSortedPosts = (
|
||||
...data,
|
||||
date: formattedDate,
|
||||
readingTime,
|
||||
publishedAt: data.published_at ?? null,
|
||||
url: url,
|
||||
path: contentPath,
|
||||
}
|
||||
@@ -65,7 +66,10 @@ export const getSortedPosts = (
|
||||
let sortedPosts = [...allPostsData]
|
||||
|
||||
sortedPosts = sortedPosts.sort((a, b) => {
|
||||
if (new Date(a.date) < new Date(b.date)) {
|
||||
const isPublishedAtBefore =
|
||||
a.publishedAt && b.publishedAt && Date.parse(a.publishedAt) < Date.parse(b.publishedAt)
|
||||
|
||||
if (isPublishedAtBefore || new Date(a.date) < new Date(b.date)) {
|
||||
return 1
|
||||
} else {
|
||||
return -1
|
||||
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 171 KiB |
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 152 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:03:30 +0000</lastBuildDate>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Thu, 15 Dec 2022 23:11:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Sat, 01 Aug 2020 22:10:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Wed, 08 Jul 2020 22:10:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Mon, 06 Jul 2020 22:10:00 +0000</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:03:30 +0000</lastBuildDate>
|
||||
<lastBuildDate>Fri, 26 Feb 2021 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Fri, 26 Feb 2021 23:11:00 +0000</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:03:30 +0000</lastBuildDate>
|
||||
<lastBuildDate>Wed, 14 Dec 2022 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Wed, 14 Dec 2022 23:11:00 +0000</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:03:30 +0000</lastBuildDate>
|
||||
<lastBuildDate>Wed, 23 Nov 2022 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Wed, 23 Nov 2022 23:11:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Sun, 02 Oct 2022 22:10:00 +0000</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:03:30 +0000</lastBuildDate>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Thu, 15 Dec 2022 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Wed, 30 Nov 2022 23:11:00 +0000</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,42 +5,42 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Oliver Rice at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Thu, 16 Feb 2023 03:03:30 +0000</lastBuildDate>
|
||||
<lastBuildDate>Thu, 16 Feb 2023 23:11:00 +0000</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-oli_rice-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<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:03:30 +0000</pubDate>
|
||||
<pubDate>Thu, 16 Feb 2023 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Thu, 15 Dec 2022 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Wed, 14 Dec 2022 23:11:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Thu, 18 Aug 2022 22:10:00 +0000</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/audit</guid>
|
||||
<title>Postgres Auditing in 150 lines of SQL</title>
|
||||
<link>https://supabase.com/blog/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:03:30 +0000</pubDate>
|
||||
<pubDate>Mon, 07 Mar 2022 23:11:00 +0000</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,42 +5,42 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Paul Copplestone at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Wed, 14 Dec 2022 03:03:30 +0000</lastBuildDate>
|
||||
<lastBuildDate>Wed, 14 Dec 2022 23:11:00 +0000</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-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:03:30 +0000</pubDate>
|
||||
<pubDate>Wed, 14 Dec 2022 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Fri, 09 Dec 2022 23:11:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Mon, 27 Jun 2022 22:10:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Thu, 04 Mar 2021 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Tue, 17 Nov 2020 23:11:00 +0000</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
@@ -5,21 +5,21 @@
|
||||
<link>https://supabase.com/blog</link>
|
||||
<description>Latest Postgres news from Pavel Borisov at Supabase</description>
|
||||
<language>en</language>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 03:03:30 +0000</lastBuildDate>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 23:11:00 +0000</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/planetpg-pavel-rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<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:03:30 +0000</pubDate>
|
||||
<pubDate>Thu, 15 Dec 2022 23:11:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Wed, 26 Oct 2022 22:10:00 +0000</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:03:30 +0000</lastBuildDate>
|
||||
<lastBuildDate>Thu, 15 Dec 2022 23:11:00 +0000</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:03:30 +0000</pubDate>
|
||||
<pubDate>Thu, 15 Dec 2022 23:11:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Thu, 01 Jul 2021 22:10:00 +0000</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:02:30 +0000</lastBuildDate>
|
||||
<lastBuildDate>Thu, 13 Oct 2022 22:10:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Thu, 13 Oct 2022 22:10:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Wed, 07 Sep 2022 22:10:00 +0000</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:02:30 +0000</pubDate>
|
||||
<pubDate>Sun, 17 Jul 2022 22:10:00 +0000</pubDate>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
|
||||
+187
-187
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user