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§
pub use datum::AnyArray;pub use datum::AnyElement;pub use datum::AnyNumeric;pub use datum::Array;pub use datum::FromDatum;pub use datum::Inet;pub use datum::Internal;pub use datum::IntoDatum;pub use datum::Json;pub use datum::JsonB;pub use datum::Numeric;pub use datum::Range;pub use datum::Uuid;pub use datum::VariadicArray;pub use datum::geo;pub use datum::numeric;pub use spi::Spi;pub use pgrx_macros;pub use aggregate::*;pub use atomics::*;pub use callbacks::*;pub use enum_helper::*;pub use fcinfo::*;pub use guc::*;pub use htup::*;pub use inoutfuncs::*;pub use list::old_list::*;pub use lwlock::*;pub use memcxt::*;pub use namespace::*;pub use nodes::*;pub use pgbox::*;pub use rel::*;pub use shmem::*;pub use stringinfo::*;pub use trigger_support::*;pub use tupdesc::*;pub use varlena::*;pub use wrappers::*;pub use xid::*;
Modules§
- aggregate
- Aggregate support.
- array
- atomics
- bgworkers
- Safely create Postgres Background Workers, including with full SPI support
- callbacks
- Provides safe wrappers around Postgres’ “Transaction” and “Sub Transaction” hook system
- callconv
- Helper implementations for returning sets and tables from
#[pg_extern]-style functions - datetime
- datum
- Handing for easily converting Postgres Datum types into their corresponding Rust types and converting Rust types into their corresponding Postgres types
- enum_
helper - Helper functions for working with Postgres
enumtypes - fcinfo
- Helper functions for creating Postgres UDFs
- ffi
- Reexport FFI definitions here.
- fn_call
- guc
- Provides a safe interface into Postgres’ Configuration System (GUC)
- heap_
tuple - Provides a safe interface to Postgres
HeapTupleobjects. - htup
- Utility functions for working with
pg_sys::HeapTupleandpg_sys::HeapTupleHeaderstructs - inoutfuncs
- Helper trait for the
#[derive(PostgresType)]proc macro for overriding custom Postgres type input/output functions. - itemptr
- Helper functions for working with Postgres
ItemPointerData(tid) type - iter
- layout
- 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.
- list
- A safe wrapper around Postgres’ internal
Liststructure. - lwlock
- memcx
- Memory Contexts in PostgreSQL, now with lifetimes.
- memcxt
- Provides interfacing into Postgres’
MemoryContextsystem. - misc
- namespace
- A helper struct for creating a Postgres
ListofStrings to qualify an object name - nodes
- Helper functions and such for Postgres’ various query tree
Nodes - nullable
- 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
- palloc
- pg_
catalog - pg_sys
- dirty hacks
- pgbox
- prelude
- The PGRX prelude includes necessary imports to make extensions work.
- rel
- Provides a safe wrapper around Postgres’
pg_sys::RelationDatastruct - shmem
- spi
- Safe access to Postgres’ Server Programming Interface (SPI).
- spinlock
- stringinfo
- A safe wrapper around Postgres
StringInfostructure - trigger_
support - Support for writing Rust trigger functions
- tupdesc
- Provides a safe wrapper around Postgres’
pg_sys::TupleDescDatastruct - varlena
- Helper functions to work with Postgres
varlena *structures - wrappers
- Provides safe wrapper functions around some of Postgres’ useful functions.
- xid
Macros§
- FATAL
- Log to Postgres’
fatallog level. This will abort the current Postgres backend connection process. - PANIC
- Log to Postgres’
paniclog level. This will cause the entire Postgres cluster to crash. - check_
for_ interrupts - If an interrupt is pending (perhaps a user-initiated “cancel query” message to this backend), this will safely abort the current transaction
- composite_
type - Composite type support
- debug1
- Log to Postgres’
debug1log level. - debug2
- Log to Postgres’
debug2log level. - debug3
- Log to Postgres’
debug3log level. - debug4
- Log to Postgres’
debug4log level. - debug5
- Log to Postgres’
debug5log level. - default
- A macro for specifying default argument values so they get properly translated to SQL in
CREATE FUNCTIONstatements - ereport
- 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.
- ereport_
domain - Send some kind of message to Postgres similar to the ereport macro, while specifying
a text domain, analogous to Postgres’
ereport_domainC macro. - error
- Log to Postgres’
errorlog level. This will abort the current Postgres transaction. - extension_
sql - Declare SQL to be included in generated extension script.
- extension_
sql_ file - Declare SQL (from a file) to be included in generated extension script.
- function_
name - 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. - impl_
sql_ translatable - Implements
SqlTranslatablefor a type with a fixed external SQL mapping. - info
- Log to Postgres’
infolog level. - log
- Log to Postgres’
loglog level. - name
- A macro for providing SQL names for the returned fields for functions that return a Rust tuple,
especially those that return a
TableIterator. - notice
- Log to Postgres’
noticelog level. - oids_of
- Creates an array of
pg_sys::Oidwith the OID of each provided type - pg_
magic_ func - Create the
Pg_magic_funcrequired by PGRX in extensions. - pg_
module_ magic - A macro for marking a library compatible with
pgrx. - pg_
shmem_ init - In order to store a type in Postgres Shared Memory, it must be passed to
pg_shmem_init!()during_PG_init(). - pgrx_
resolved_ type - warning
- Log to Postgres’
warninglog level.
Structs§
- PgTry
Builder PgTryBuilderis a mechanism to mimic Postgres C macrosPG_TRYandPG_CATCH.
Enums§
- PgLog
Level - Postgres’ various logging levels
- PgOid
- PgSql
Error Code - This list of SQL Error Codes is taken directly from Postgres 12’s generated “utils/errcodes.h”
Constants§
Functions§
- name_
data_ to_ str - Converts a
pg_sys::NameDatastruct into a&str.
Type Aliases§
Attribute Macros§
- commutator
- Used with
#[pg_operator]. 1 value which is the function name - hashes
- Used with
#[pg_operator]. no values - initialize
- Associated macro for
#[pg_test]to provide context back to your test framework to indicate that the test system is being initialized - join
- Used with
#[pg_operator]. 1 value which is the function name - merges
- Used with
#[pg_operator]. no values - negator
- Used with
#[pg_operator]. 1 value which is the function name - opname
- Used with
#[pg_operator]. 1 value which is the operator name itself - pg_
aggregate - Declare a
pgrx::Aggregateimplementation on a type as able to used by Postgres as an aggregate. - pg_
bench #[pg_bench]functions are in-process Criterion-driven benchmarks that run inside Postgres duringcargo pgrx bench.- pg_cast
- Declare a function as
#[pg_cast]to indicate that it represents a Postgres cast. - pg_
extern - Declare a function as
#[pg_extern]to indicate that it can be used by Postgres as a UDF. - pg_
guard - Declare a function as
#[pg_guard]to indicate that it is called from a Postgresextern "C-unwind"function so that Rustpanic!()s (and Postgreselog(ERROR)s) will be properly handled bypgrx - pg_
guc_ hook - Declare a function as a GUC hook. This takes one argument:
show,check, orassign. - pg_
operator - Declare a function as
#[pg_operator]to indicate that it represents a Postgres operatorcargo pgrx schemawill automatically generate the underlying SQL - pg_
schema - Declare a Rust module and its contents to be in a schema.
- pg_test
#[pg_test]functions are test functions (akin to#[test]), but they run in-process inside Postgres duringcargo pgrx test.- pg_
trigger - Create a PostgreSQL trigger function
- pgrx
- A helper attribute for various contexts.
- restrict
- Used with
#[pg_operator]. 1 value which is the function name - search_
path - Associated macro for
#[pg_extern]or#[macro@pg_operator]. Used to set theSEARCH_PATHoption on theCREATE FUNCTIONstatement.
Derive Macros§
- Aggregate
Name - Derives the
ToAggregateNametrait. - Postgres
Enum - Generate necessary bindings for using the enum with PostgreSQL.
- Postgres
Eq - Generate necessary code using the type in operators like
==and!=. - Postgres
GucEnum - Derives the
GucEnumtrait, so that normal Rust enums can be used as a GUC. - Postgres
Hash - Generate necessary code for stable hashing the type so it can be used with
USING hashindexes. - Postgres
Ord - Generate necessary code using the type in operators like
>,<,<=, and>=. - Postgres
Type - Generate necessary bindings for using the type with PostgreSQL.