Crates.io | supabase-wrappers |
lib.rs | supabase-wrappers |
version | 0.1.20 |
source | src |
created_at | 2022-10-27 09:25:16.385682 |
updated_at | 2024-10-15 23:06:37.543238 |
description | Postgres Foreign Data Wrapper development framework in Rust. |
homepage | https://github.com/supabase/wrappers/tree/main/supabase-wrappers |
repository | https://github.com/supabase/wrappers/tree/main/supabase-wrappers |
max_upload_size | |
id | 699013 |
size | 130,964 |
Wrappers
is a development framework for Postgres Foreign Data Wrappers (FDW), written in Rust. Its goal is to make Postgres FDW development easier while keeping Rust language's modern capabilities, such as high performance, strong types, and safety.
Wrappers
is also a collection of FDWs built by Supabase. We currently support the following FDWs, with more are under development:
WHERE
, ORDER BY
, LIMIT
pushdown are supported.Wrappers
is a pgrx extension, you can follow the pgrx installation steps to install Wrappers.
Basically, run below command to install FDW after pgrx
is installed. For example,
cargo pgrx install --pg-config [path_to_pg_config] --features stripe_fdw
To develop a FDW using Wrappers
, you only need to implement the ForeignDataWrapper trait.
pub trait ForeignDataWrapper {
// create a FDW instance
fn new(...) -> Self;
// functions for data scan, e.g. select
fn begin_scan(...);
fn iter_scan(...) -> Option<Row>;
fn end_scan(...);
// functions for data modify, e.g. insert, update and delete
fn begin_modify(...);
fn insert(...);
fn update(...);
fn delete(...);
fn end_modify(...);
// other optional functions
...
}
In a minimum FDW, which supports data scan only, new()
, begin_scan()
, iter_scan()
and end_scan()
are required, all the other functions are optional.
To know more about FDW development, please visit the Wrappers documentation.
These steps outline how to use the a demo FDW HelloWorldFdw, which only outputs a single line of fake data:
git clone https://github.com/supabase/wrappers.git
cd wrappers/wrappers
cargo pgrx run --features helloworld_fdw
-- create extension
create extension wrappers;
-- create foreign data wrapper and enable 'HelloWorldFdw'
create foreign data wrapper helloworld_wrapper
handler hello_world_fdw_handler
validator hello_world_fdw_validator;
-- create server and specify custom options
create server my_helloworld_server
foreign data wrapper helloworld_wrapper
options (
foo 'bar'
);
-- create an example foreign table
create foreign table hello (
id bigint,
col text
)
server my_helloworld_server
options (
foo 'bar'
);
wrappers=# select * from hello;
id | col
----+-------------
0 | Hello world
(1 row)
All contributions, feature requests, bug report or ideas are welcomed.