v0.2.0
This is pgx v0.2.0
. It represents months of work on new tooling around automatic SQL schema generation, Postgres 14 support, various safety improvements, and some user-facing (breaking) API changes.
We thank everyone that helped test the betas and are excited to finally release v0.2.0!
Upgrading
Please make sure to run cargo install cargo-pgx
and update all pgx extension Cargo.toml
file "pgx*" dependency versions to 0.2.0
.
Features
- PostgreSQL v14 support (#245)
- The
pgx
SQL generation system has been rewritten! It now uses the proc macro system and has several breaking changes. Please refer to the migration guide below. (#165, #197) - The PostgreSQL
uuid
type is now supported! (#172) cargo pgx test
now accepts an optional testname.cargo pgx test specific::path
works just likecargo test
! (#186)pgx-pg-sys
now suggests you installrustfmt
if you don't have it. (#193)cargo pgx schema
will now emit informational messages if extensionCargo.toml
settings are not what is expected. (#209)cargo pgx test
now has a--workspace
argument matching the equivalent oncargo test
. (#169)
Other changes
- fix: Marked several functions as unsafe as they had undefined behavior when passed invalid pointers. (#210, #216, #217, #223, #224, #226)
- Type
oid
s don't need to be looked up in functions that don't use them. (#168) - Added an aggregate example. (#187)
- Updated many of our dependencies. (#191)
- More documentation has been added to several macros and SQL generation related types. (#192, #158, #219)
- An
articles/
directory now exists in the repo and includes links to different articles written aboutpgx
. (#198) - Document our MSRV (#157)
- Fixed an accidental circular dependency in 0.2.0-beta.0 (unpublished).
- Resolve undefined behavior around exported function symbols (#241)
- As a result there is now
pgx::direct_function_call()
andpgx::direct_pg_extern_function_call()
for dynamically calling internal Postgres functions and functions you declare as#[pg_extern]
.
- As a result there is now
- Fix up Darwin linking issues (#244)
- Resolve issues with sql entity graph generation (#236, #260)
#[pg_extern]
functions with lifetimes no longer cause compiler errors (#268)- Add a
--no-schema
flag tocargo pgx run/test/install
which avoids generating the schema again. This can help speed up the development cycle if you haven't made any code changes that would affect the SQL schema (#262) #[pg_extern]
no longer fails with return types with lifetimes inside Option<...> (#270)PgBox
has been rewritten to be the size of a single pointer (usize
). Its user-facing API is the same, but you may need to add declare an associated type ofAllocatedByPostgres
orAllocatedByRust
depending on usage context- The
Internal
type is no longer generic, and its API has been changed to provide typed getter functions. It is also documented.
Migration Guide
-
Update your
cargo-pgx
:cargo install --force cargo-pgx --version 0.2.0-beta.0
-
In your
Cargo.toml
, setcrate-type
to include"rlib"
andprofile.dev.lto
to be"thin"
:[lib] crate-type = ["cdylib", "rlib"] [profile.dev] lto = "thin"
-
Tell
cargo-pgx
to force update your.cargo/
andsrc/bin
files it needs:cargo pgx schema -f
-
Remove any
sql/*.generated.sql
files, as well as theload-order.txt
. -
For each
sql/*.sql
remaining, insertextension_sql_file!("../sql/that_file.sql");
into yoursrc/lib.rs
-
If the files depend on entities which already exist, you might need to set a
requires
attribute:extension_sql_file!("../sql/that_file.sql", requires = [ dogs::parts::Floof, some_fn, ]);
-
For any
mod floof { fn boop() { todo!() } }
style blocks you were using to infer schema name (making that functionfloof.boop
), decorate the schema with#[pg_schema]
:#[pg_schema] mod floof { fn boop() { todo!() } }
-
For any functions have a custom
sql
block for (like below), update that to usepgxsql
now:/// ```sql <-- Change this to `pgxsql` /// CREATE OR REPLACE FUNCTION .... /// ``` #[pg_extern] fn dot_dot_dot() { todo!() }
-
Run
cargo pgx schema
again!
If you have any trouble, try running cargo pgx schema -v
and investigating the output. We made sure to update the cargo doc
output of pgx
with updated usage for the various macros and derives, they might have some advice, too.
You can ask us questions via issues here or Discord if you get stuck.
Thanks!
Thanks to @JLockerman (from @timescale) & @kpumuk for contributions! Also thanks to our early testers @rustprooflabs and @comdiv.