Tags: jean-turgeon/pgrx
Tags
Prepare pgrx 0.12.0-beta.3 (pgcentralfoundation#1779) Publicizes the `pgrx::callconv` API after pushing it to its final form.
Release pgrx 0.12.0-alpha.1 (pgcentralfoundation#1598) Welcome to pgrx 0.12.0-alpha.1! Say the magic words with me! ```shell cargo install cargo-pgrx --locked --version 0.12.0-alpha.1 ``` # Breaking Changes ## No more dlopen! Perhaps the most exciting change this round is @usamoi's contribution in pgcentralfoundation#1468 which means that we no longer perform a `dlopen` in order to generate the schema. The cost, such as it is, is that your pgrx extensions now require a `src/bin/pgrx_embed.rs`, which will be used to generate the schema. This has much less cross-platform issues and will enable supporting things like `cargo binstall` down the line. It may be a bit touchy on first-time setup for transitioning older repos. If necessary, you may have to directly add a `src/bin/pgrx_embed.rs` and add the following code (which should be the only code in the file, though you can add comments if you like?): ```rust ::pgrx::pgrx_embed!(); ``` Your Cargo.toml will also want to update its crate-type key for the library: ```toml [lib] crate-type = ["cdylib", "lib"] ``` ## Library Code - pgrx-pg-sys will now use `ManuallyDropUnion` thanks to @NotGyro in pgcentralfoundation#1547 - VARHDRSZ `const`s are no longer `fn`, thanks to @workingjubilee in pgcentralfoundation#1584 - We no longer have `Interval::is_finite` since pgcentralfoundation#1594 - We translate more `*_tree_walker` functions to the same signature their `*_impl` version in Postgres 16 has: pgcentralfoundation#1596 - Thanks to @eeeebbbbrrrr in pgcentralfoundation#1591 we no longer have the `pg_sql_graph_magic!()` macro, which should help with more things in the future! # What's New We have quite a lot of useful additions to our API: - `SpiClient::prepare_mut` was added thanks to @XeniaLu in pgcentralfoundation#1275 - @usamoi also contributed bindings subscripting code in pgcentralfoundation#1562 - For `#[pg_test]`, you have been able to use `#[should_panic(expected = "string")]` to anticipate a panic that contains that string in that test. For various reasons, `#[pg_test(error = "string")]` is much the same. Now, you can also use `#[pg_test(expected = "string")]`, in the hopes that is easier to stumble across, as of pgcentralfoundation#1570 ## `Result<composite_type!("..."), E>` support - In pgcentralfoundation#1560 @NotGyro contributed support for using `Result<composite_type!("Name"), E>`, as a case that had not been handled before. ## Significantly expanded docs Thanks to @rjuju, @NotGyro, and @workingjubilee, we now have significantly expanded docs for cargo-pgrx and pgrx in general. Some of these are in the API docs on https://docs.rs or the READMEs, but there's also a guide, now! It's not currently published, but is available as an [mdbook](https://github.com/rust-lang/mdBook) in the repo. Some diagnostic information that is also arguably documentation, like comments and the suggestion to `cargo install`, have also been improved, thanks to @workingjubilee in - pgcentralfoundation#1579 - pgcentralfoundation#1573 ## `#[pg_cast]` An experimental macro for a `CREATE CAST` was contributed by @xwkuang5 in pgcentralfoundation#1445! ## Legal Stuff Thanks to @the-kenny in pgcentralfoundation#1490 and @workingjubilee in pgcentralfoundation#1504, it was brought to our attention that some dependencies had unusual legal requirements. So we fixed this with CI! We now check our code included into pgrx-using binaries is MIT/Apache 2.0 licensed, as is common across crates.io, using `cargo deny`!. The build tools will have more flexible legal requirements (partly due to the use of Mozilla Public License code in rustls). # Internal Changes Many internal cleanups were done thanks to - @workingjubilee in too many PRs to count! - @thomcc found a needless condition in pgcentralfoundation#1501 - @nyurik in too many PRs to count! In particular: - we now actually `pfree` our `Array`s we detoasted as-of pgcentralfoundation#1571 - creating a `RawArray` is now low-overhead due to pgcentralfoundation#1587 ## Soundness Fixes We had a number of soundness issues uncovered or have added more tests to catch them. - Bounds-checking debug assertions for array access by @NotGyro in pgcentralfoundation#1514 - Fix unsound `&` and `&mut` in `fcinfo.rs` by @workingjubilee in pgcentralfoundation#1595 ## Less Deps Part of the cleanup by @workingjubilee was reducing the number of deps we compile: * cargo-pgrx: reduce trivial dep usages in pgcentralfoundation#1499 * Update 2 syn in pgcentralfoundation#1557 Hopefully it will reduce compile time and disk usage! ## New Contributors * @the-kenny made their first contribution in pgcentralfoundation#1490 * @xwkuang5 made their first contribution in pgcentralfoundation#1445 * @rjuju made their first contribution in pgcentralfoundation#1516 * @nyurik made their first contribution in pgcentralfoundation#1533 * @NotGyro made their first contribution in pgcentralfoundation#1514 * @XeniaLu made their first contribution in pgcentralfoundation#1275 **Full Changelog**: pgcentralfoundation/pgrx@v0.12.0-alpha.0...v0.12.0-alpha.1
Update pgrx to 0.12.0-alpha.0 (pgcentralfoundation#1497) Hello and welcome to The Beginning of The End! You may have seen some largely-inscrutable rambling about "object lifetimes" and "memory contexts" from me in various comments, logs, and issues. You may have also heard that this has effectively stalled all forward feature work. You may have noticed this has been the case for months now. The long and short of it is that pgrx never actually fully built-in the actual lifetimes of objects in Postgres into its various types. As more and more interlocking parts grew, between things like the type unboxing in `trait FromDatum`, or the bounded memory context of `Spi::connect`, eventually many supposedly-safe interfaces arose which proved wildly unsafe in reality due to this mesh of interactions. Internal portions of pgrx relied on expeditious hacks to ignore the growing problems, until this rotten foundation yielded an enormous crop of soundness issues over the year of 2023. Even when not exploitable, they prevent otherwise-trivial enhancements in terms of speed or memory usage. Key elements of a new foundation have landed in pgrx, which allow ascribing lifetimes to every datum and every memory context that a Postgres extension will encounter. There is much more work to be done to actually make it so all Rust code has to flow through these new interfaces. This alpha release is an extremely "preview" release to allow assessing some of the damage from the first set of breaking changes, so that some initial feedback and triage can occur. There will, unfortunately, be more breaking changes on the horizon. ## Many Macros Expand Subtly Differently If your extension now breaks in some inscrutable way that you cannot otherwise discern, the problem is probably hidden in macro expansion. This cannot really be diagnosed except using `cargo expand` diffed against previous expansions. A most likely issue is that something that previously hid a lifetime during expansion or writes it as 'static now propagates it by name or as the anonymous '_ lifetime. ## `Datum<'src>` There are now lifetime-bound Datums. Expect to see them in more places. ## `UnboxDatum<As<'src> = Type<'src>>` Expect to see this or a similar signature a lot: there are new conversion traits which use a generic associated type or similar sneaky tactics to allow "clamping down" the lifetime to a bound, unless the produced type is always 'static by being a simple value like `i32`. ## `&'mcx MemCx<'_>` You will see more and more references to this type, which is a memory context that encodes an inner invariant lifetime, in signatures. If one of these is currently in-scope, then please remember it is always `unsafe` to manipulate the `static mut CurrentMemoryContext` in Postgres, but it is doubly so then. In general, when designing your own types using pgrx, you should prefer designing code that uses a signature like that of `MemoryContextAlloc` instead of `palloc` if you are at all uncertain.
Release pgrx 0.11.3 (pgcentralfoundation#1496) The pgrx 0.11.3 release addresses a few UB risks in pgrx, updates its dependencies on many points, and includes many additional headers. It should also now be easier to use cargo-pgrx on more-complicated network configurations. ## New Bindings! New bindings added thanks to - @burmecia in pgcentralfoundation#1432 - @daamien in - pgcentralfoundation#1431 - pgcentralfoundation#1485 - @rebasedming in pgcentralfoundation#1486 - @usamoi in pgcentralfoundation#1436 - @workingjubilee in pgcentralfoundation#1453 ## "...wait, that's UB?" Two UB fixes! - Thanks to @Lokathor in pgcentralfoundation#1443 - Thanks to @usamoi in pgcentralfoundation#1466 ## Ergonomics - A better `ereport!` macro in pgcentralfoundation#1472 ## Less transport-level security problems in cargo-pgrx - We no longer secretly require rustls! Thanks to @jirutka in pgcentralfoundation#1448 - We now use native certs if possible, even with rustls, since pgcentralfoundation#1449 Together these should mean it's possible to actually use cargo-pgrx on whatever your network configuration is, but you might have to use `cargo install --no-default-features --features native-tls` to install with native-tls (which, on Linux, means OpenSSL). By default, you will use rustls. ## Many dependency updates These address some largely-hypothetical security risks, but one is particularly important: the bindgen update means we now should be compatible with some aarch64 builds that might have failed. - pgcentralfoundation#1492 - pgcentralfoundation#1493 - pgcentralfoundation#1494
Prepare pgrx v0.11.2 (pgcentralfoundation#1425) pgrx v0.11.2 is a minor release which - makes available the storage-related API, thanks to @silver-ymz in pgcentralfoundation#1409 - deprecates the `Oid::from_u32_unchecked` API... because it is actually possible to do via casting in a *query*, which makes it effectively impossible for us to not wind up providing it via some other safe API, since the source is also an easily-Copied type. Thus you can now simply use `From::from` for it. Thanks to @thomcc for this discovery, implemented by @workingjubilee in pgcentralfoundation#1374 As usual, `cargo install cargo-pgrx --version 0.11.2 --locked` and be on your merry way! Thanks everyone!
Cut pgrx v0.11.1 (pgcentralfoundation#1408) Hello. Welcome to pgrx v0.11.1, a bugfix release that hopefully addresses a very annoying persistent problem for users, especially ones that were trying to use pgrx with Postgres 16! My changes in b992f55 now steer bindgen towards including the exact compiler-header directory that we require, instead of relying on clang-sys to guess the right directory in ways that can go horribly wrong. Unfortunately, this may make our build step more brittle in certain cases. Please report issues as they arise, so that we can continue to refine our build system, and eventually fix this in bindgen proper! This new behavior can still be disabled by setting `PGRX_BINDGEN_NO_DETECT_INCLUDES`, as it is still a form of autodetecting includes, but if this release fixes your build that was previously relying on that or any other easily-removed hack, please let us know! Also, thanks to LuminousMonkey, you can now use pgrx on illumos, an operating system descended from Solaris, with no changes to your source code!
PreviousNext