Crate pgrx

Source
Expand description

pgrx is a framework for creating Postgres extensions in 100% Rust

§Example

use pgrx::prelude::*;

// Convert the input string to lowercase and return
#[pg_extern]
fn my_to_lowercase(input: &str) -> String {
    input.to_lowercase()
}

Re-exports§

Modules§

  • Aggregate support.
  • Safely create Postgres Background Workers, including with full SPI support
  • Provides safe wrappers around Postgres’ “Transaction” and “Sub Transaction” hook system
  • Helper implementations for returning sets and tables from #[pg_extern]-style functions
  • Handing for easily converting Postgres Datum types into their corresponding Rust types and converting Rust types into their corresponding Postgres types
  • Helper functions for working with Postgres enum types
  • Helper functions for creating Postgres UDFs
  • Reexport FFI definitions here.
  • Provides a safe interface into Postgres’ Configuration System (GUC)
  • Provides a safe interface to Postgres HeapTuple objects.
  • hooksDeprecated
    A trait and registration system for hooking Postgres internal operations such as its planner and executor
  • Utility functions for working with pg_sys::HeapTuple and pg_sys::HeapTupleHeader structs
  • Helper trait for the #[derive(PostgresType)] proc macro for overriding custom Postgres type input/output functions.
  • Helper functions for working with Postgres ItemPointerData (tid) type
  • Code for interfacing with the layout in memory (and on disk?) of various data types within Postgres. This is not a mature module yet so prefer to avoid exposing the contents to public callers of pgrx, as this is error-prone stuff to tamper with. It is easy to corrupt the database if an error is made. Yes, even though its main block of code duplicates htup::DatumWithTypeInfo.
  • A safe wrapper around Postgres’ internal List structure.
  • Memory Contexts in PostgreSQL, now with lifetimes.
  • Provides interfacing into Postgres’ MemoryContext system.
  • A helper struct for creating a Postgres List of Strings to qualify an object name
  • Helper functions and such for Postgres’ various query tree Nodes
  • Traits and implementations of functionality relating to Postgres null and nullable types, particularly in relation to arrays and other container types which implement nullable (empty slot) behavior in a “structure-of-arrays” manner
  • dirty hacks
  • The PGRX prelude includes necessary imports to make extensions work.
  • Provides a safe wrapper around Postgres’ pg_sys::RelationData struct
  • Safe access to Postgres’ Server Programming Interface (SPI).
  • A safe wrapper around Postgres StringInfo structure
  • Support for writing Rust trigger functions
  • Provides a safe wrapper around Postgres’ pg_sys::TupleDescData struct
  • Helper functions to work with Postgres varlena * structures
  • Provides safe wrapper functions around some of Postgres’ useful functions.

Macros§

  • Log to Postgres’ fatal log level. This will abort the current Postgres backend connection process.
  • Log to Postgres’ panic log level. This will cause the entire Postgres cluster to crash.
  • If an interrupt is pending (perhaps a user-initiated “cancel query” message to this backend), this will safely abort the current transaction
  • Composite type support
  • Log to Postgres’ debug1 log level.
  • Log to Postgres’ debug2 log level.
  • Log to Postgres’ debug3 log level.
  • Log to Postgres’ debug4 log level.
  • Log to Postgres’ debug5 log level.
  • A macro for specifying default argument values so they get properly translated to SQL in CREATE FUNCTION statements
  • Sends some kind of message to Postgres, and if it’s a PgLogLevel::ERROR or greater, Postgres’ error handling takes over and, in the case of PgLogLevel::ERROR, aborts the current transaction.
  • Log to Postgres’ error log level. This will abort the current Postgres transaction.
  • Declare SQL to be included in generated extension script.
  • Declare SQL (from a file) to be included in generated extension script.
  • This macro returns the name of the enclosing function. As the internal implementation is based on the std::any::type_name, this macro derives all the limitations of this function.
  • Log to Postgres’ info log level.
  • Log to Postgres’ log log level.
  • A macro for providing SQL names for the returned fields for functions that return a Rust tuple, especially those that return a TableIterator.
  • Log to Postgres’ notice log level.
  • Create the Pg_magic_func required by PGRX in extensions.
  • A macro for marking a library compatible with pgrx.
  • In order to store a type in Postgres Shared Memory, it must be passed to pg_shmem_init!() during _PG_init().
  • Entry point for cargo-pgrx’s schema generation so that PGRX’s framework can generate SQL for its types and functions and topographically sort them into an order Postgres will accept. Typically written by the cargo pgrx new template, so you probably don’t need to worry about this.
  • variadicDeprecated
  • Log to Postgres’ warning log level.

Structs§

Enums§

  • Postgres’ various logging levels
  • This list of SQL Error Codes is taken directly from Postgres 12’s generated “utils/errcodes.h”

Constants§

Functions§

Type Aliases§

Attribute Macros§

  • Used with #[pg_operator]. 1 value which is the function name
  • Used with #[pg_operator]. no values
  • Associated macro for #[pg_test] to provide context back to your test framework to indicate that the test system is being initialized
  • Used with #[pg_operator]. 1 value which is the function name
  • Used with #[pg_operator]. no values
  • Used with #[pg_operator]. 1 value which is the function name
  • Used with #[pg_operator]. 1 value which is the operator name itself
  • Declare a pgrx::Aggregate implementation on a type as able to used by Postgres as an aggregate.
  • Declare a function as #[pg_cast] to indicate that it represents a Postgres cast.
  • Declare a function as #[pg_extern] to indicate that it can be used by Postgres as a UDF.
  • Declare a function as #[pg_guard] to indicate that it is called from a Postgres extern "C" function so that Rust panic!()s (and Postgres elog(ERROR)s) will be properly handled by pgrx
  • Declare a function as #[pg_operator] to indicate that it represents a Postgres operator cargo pgrx schema will automatically generate the underlying SQL
  • Declare a Rust module and its contents to be in a schema.
  • #[pg_test] functions are test functions (akin to #[test]), but they run in-process inside Postgres during cargo pgrx test.
  • A helper attribute for various contexts.
  • Used with #[pg_operator]. 1 value which is the function name
  • Associated macro for #[pg_extern] or #[macro@pg_operator]. Used to set the SEARCH_PATH option on the CREATE FUNCTION statement.

Derive Macros§

  • Generate necessary bindings for using the enum with PostgreSQL.
  • Generate necessary code using the type in operators like == and !=.
  • Derives the GucEnum trait, so that normal Rust enums can be used as a GUC.
  • Generate necessary code for stable hashing the type so it can be used with USING hash indexes.
  • Generate necessary code using the type in operators like >, <, <=, and >=.
  • Generate necessary bindings for using the type with PostgreSQL.