The reference section is a list of functions available with Analytics Accelerator.
Refer to PGFS functions for Pipelines for details on how to create storage locations for PGAA.
Table functions
pgaa.list_analytics_tables()
Returns a list of all analytics tables managed by PGAA, including their configuration, storage statistics, and current replication status.
Synopsis
SELECT * FROM pgaa.list_analytics_tables();
Parameters
None.
Returns
| Column | Type | Description |
|---|---|---|
nspoid | OID | The OID of the namespace (schema) containing the table. |
reloid | OID | The OID of the table relation. |
schema_name | TEXT | Name of the Postgres schema. |
table_name | TEXT | Name of the analytics table. |
format | pgaa.table_format | The storage format (delta, iceberg, or parquet). |
object_storage_snapshot_size_bytes | BIGINT | The size in bytes of the latest table snapshot in object storage. |
object_storage_total_size_bytes | BIGINT | The total size in bytes of all versions/files for this table in object storage. |
replication_status | pgaa.replication_status | The current state of data movement (enabled, disabled, or initial_offload). Requires PGD integration. |
storage_location_name | TEXT | The name of the PGFS storage location associated with the table. |
storage_location_path | TEXT | The path within the storage location where the data resides. |
catalog_name | TEXT | Name of the external catalog, if applicable. |
catalog_namespace | TEXT | The namespace within the external catalog. |
catalog_table | TEXT | The table name as defined in the external catalog. |
A table can either have a storage location or a catalog. It cannot have both.
The catalog details refer to either the replication target, if performing a catalog-managed offload or replication to object storage, or to the source catalog location, if reading data from tables managed by an external catalog.
Note
In a PGD environment, this function relies on BDR and isn't available when restoring a single node in isolation. See Restoring a single PGD node in isolation for alternatives.
pgaa.lakehouse_table_stats()
Returns storage statistics for a specific analytical table, including the size of the latest active snapshot and the total cumulative size of all data versions (historical data and logs) stored in object storage.
Synopsis
SELECT * FROM pgaa.lakehouse_table_stats('table_name'::regclass);
Parameters
| Parameter | Type | Description |
|---|---|---|
relation | REGCLASS | The name or OID of the analytical table to investigate. |
Returns
| Column | Type | Description |
|---|---|---|
latest_snapshot_size | BIGINT | The size in bytes of the latest active snapshot of the table. |
total_size | BIGINT | The total size in bytes of all files associated with the table in object storage, including metadata, transaction logs, and historical snapshots. |
pgaa.test_storage_location()
Tests the connectivity and configuration of a defined storage location, and verifies read or write permissions.
Synopsis
SELECT pgaa.test_storage_location('location_name', test_writes:= true);
Parameters
| Parameter | Type | Description |
|---|---|---|
name | TEXT | The name of the storage location to test. |
test_writes | BOOLEAN | If true, the function attempts a write operation to verify permissions. If false, only reads are tested. |
Returns
Returns NULL if the test is successful. Returns a descriptive error message if the test fails.
pgaa.pgaa_version()
Returns the version information for the EDB Postgres Analytics Accelerator, including the specific build version, build date, and Git commit hash.
Synopsis
SELECT pgaa.pgaa_version();
Parameters
None.
Returns
A string containing the semantic version, the build timestamp, and the unique Git identifier for the current installation.
pgaa.engine_version()
Returns version information from the currently configured executor engine. Queries the backend engine selected by pgaa.executor_engine (Seafowl or Spark Connect) and returns its version details. For Seafowl, returns build and version metadata. For Spark Connect, returns the Spark version and, where available, Java, Scala, and OS information from the Spark driver.
Replaces pgaa.seafowl_version(), which was removed in PGAA 1.9.
Synopsis
SELECT pgaa.engine_version();
Parameters
None.
Returns
A string containing version details for the active executor engine.
Catalog functions
pgaa.add_catalog()
Registers a new Iceberg catalog with PGAA. This function performs an automated connection check to validate credentials and accessibility before the catalog is registered in the system.
Synopsis
SELECT pgaa.add_catalog('catalog_name', 'catalog_type', 'catalog_options'::json);
Parameters
| Parameter | Type | Description |
|---|---|---|
catalog_name | VARCHAR | A unique name for the catalog within PGAA. |
catalog_type | pgaa.catalog_type | The catalog type. Supported values are iceberg-rest (Iceberg REST catalog), and iceberg-s3tables (AWS S3 Tables). |
catalog_options | JSON | A JSON object containing the the connection and authentication parameters. |
Depending on which storage you use, your JSON file for the catalog_options must specify different options.
For REST catalogs
{ "url": "https://your-catalog-endpoint.com", "warehouse_name": "your_warehouse_name", "warehouse": "your_warehouse_id", "token": "your_secret_auth_token" "danger_accept_invalid_certs": "false" }
Where:
url: The base HTTP(S) endpoint of the REST catalog service.warehouse_name: A human-readable alternative to the warehouse ID, supported by some REST providers for easier configuration.warehouse: The unique identifier for the specific warehouse within the catalog service.danger_accept_invalid_certs: If set totrue, Postgres skips SSL certificate validation. Use this only for internal testing or with self-signed certificates; never use it for sensitive public connections.Most REST catalogs vend short-term, table-scoped object store credentials to the client, so no further configuration is needed. If your REST catalog doesn't vend credentials, add a
store_configobject with the object store connection details:{ "url": "https://your-catalog-endpoint.com", "store_config": { "type": "s3", "bucket": "your-bucket-name", "access_key_id": "your-access-key", "secret_access_key": "your-secret-key", "region": "us-east-1", "endpoint": "https://your-object-store-endpoint.com", "allow_http": "true" } }
Where:
store_config.type: The object store type, for examples3for an S3-compatible store.store_config.bucket: The name of the bucket holding the catalog's Iceberg tables.store_config.access_key_idandstore_config.secret_access_key: The credentials used to access the bucket.store_config.region: (Optional) The object store region.store_config.endpoint: (Optional) The object store endpoint, required for S3-compatible stores such as MinIO.store_config.allow_http: (Optional) Set to"true"to allow non-TLS connections to the endpoint.store_configsupports the same object store providers as PGFS. For the connection options for Azure or Google Cloud Storage, see the PGFS storage provider documentation.Some Iceberg REST Catalog providers, like Snowflake Open Catalog, might expect different parameters. Specify the following OAuth options:
{ "oauth2.grant_type": "client_credentials", "oauth2.client_id": "oauth-client-id", "oauth2.client_secret": "oauth-client-secret", "oauth2.token_uri": "https://EXAMPLE-polaristest.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens", "oauth2.scope": "PRINCIPAL_ROLE:read_only" }
Where:
oauth2.grant_type: Specifies the OAuth2 flow. The most common value for service-to-service communication isclient_credentials.oauth2.client_id: The unique identifier for your application registered with the identity provider.oauth2.client_secret: The secret key used to authenticate the client ID.oauth2.token_uri: The full HTTP(S) endpoint where PGAA sends the credentials to request an access token.oauth2.scope: (Optional) A space-delimited list of permissions or resources the client is requesting access to.
For AWS S3 Tables:
{ "arn": "arn:aws:s3tables:us-east-1:1234567890:bucket/my-bucket", "region": "us-east-1" }
Where:
arn: Specifies the Amazon Resource Name (ARN), the unique identifier for your S3 Table bucket.region: Specifies the physical AWS data center location where your S3 Table bucket resides.
Returns
Returns the name of the catalog on success.
pgaa.update_catalog()
Updates the configuration options (the JSON object) for an existing Iceberg catalog. Like pgaa.add_catalog(), this function performs a validation check to ensure the new connection parameters are functional before applying the changes.
Synopsis
SELECT * FROM pgaa.update_catalog('catalog_name', 'new_options'::json);
Parameters
| Parameter | Type | Description |
|---|---|---|
catalog_name | VARCHAR | A unique name for the catalog within PGAA. |
new_options | JSON | A JSON object containing the updated connection and authentication parameters. |
See pgaa.add_catalog() for a detailed breakdown of the required JSON fields for each catalog type.
Returns
Returns the name of the catalog upon successful update.
Example
Rotate an OAuth2 token:
SELECT * FROM pgaa.lakehouse.update_catalog( 'marketing_lakehouse', '{ "url": "https://iceberg.example.com", "oauth2.client_id": "pgaa_service_user", "oauth2.client_secret": "new_secure_secret_2026", "oauth2.token_uri": "https://auth.example.com/token" }'::json );
pgaa.delete_catalog()
Removes a registered catalog from the database. To prevent accidental data loss, this function requires a cascade parameter to be explicitly set to true if there are still tables managed by the catalog.
Synopsis
SELECT * FROM pgaa.delete_catalog('catalog_name', cascade := true);
Parameters
| Parameter | Type | Description |
|---|---|---|
catalog_name | VARCHAR | The name of the catalog to be removed. |
cascade | BOOLEAN | If true, PGAA automatically drops all local table definitions managed by this catalog before deleting the catalog entry. Default is false. |
Returns
Returns the name of the deleted catalog upon successful completion.
pgaa.list_catalogs()
Returns a list of all registered catalogs in the system, including their connection configuration, metadata synchronization timestamps, and current operational status.
Synopsis
SELECT * FROM pgaa.list_catalogs();
Parameters
None.
Returns
| Column | Type | Description |
|---|---|---|
name | TEXT | The name of the catalog. |
type | pgaa.catalog_type | The catalog type. Supported values are iceberg-rest (Iceberg REST catalog), and iceberg-s3tables (AWS S3 Tables). |
options | JSON | The connection parameters (URL, ARN, etc.) used for this catalog. |
status | pgaa.catalog_status | The current health of the catalog ( detached, attached, refresh_retry, or refresh_failed). |
created_at | TIMESTAMPTZ | The timestamp when the catalog was first registered. |
last_refreshed_at | TIMESTAMPTZ | The last time PGAA successfully synced metadata from this catalog. |
pgaa.import_catalog()
Performs a one-time scan and import of table definitions from a registered Iceberg catalog into Postgres. This function creates the local metadata required for PGAA to query the remote tables. This is a manual, once-off import and does not enable automatic, continuous synchronization.
Synopsis
SELECT pgaa.import_catalog('catalog_name', 'namespace_filter');
Parameters
| Parameter | Type | Description |
|---|---|---|
catalog_name | VARCHAR | The name of the previously registered catalog to import from. |
namespace_filter | VARCHAR | If provided, only tables within this specific Iceberg namespace will be imported. If omitted or NULL, all tables in all namespaces are imported. Default is NULL. |
Returns
None.
pgaa.attach_catalog()
Enables continuous metadata synchronization for a previously registered Iceberg catalog (using pgaa.add_catalog()). Once attached, PGAA automatically monitors the remote catalog for changes and updates the local Postgres metadata accordingly. See Catalog synchronization for polling rate configuration.
Note
pgaa.attach_catalog() is not supported on WarehousePG. Use pgaa.import_catalog() to manually import catalog metadata instead.
Synopsis
SELECT pgaa.attach_catalog('catalog_name');
Parameters
| Parameter | Type | Description |
|---|---|---|
catalog_name | VARCHAR | The name of the registered catalog to start synchronizing. |
Returns
None.
pgaa.detach_catalog()
Stops continuous metadata synchronization for a registered Iceberg catalog and moves it to a detached state. If cascade is true, it drops all tables managed by the catalog before detaching. If cascade is false, the tables remain in the database but synchronization is halted.
Synopsis
SELECT * FROM pgaa.detach_catalog('catalog_name', cascade := true);
Parameters
| Parameter | Type | Description |
|---|---|---|
catalog_name | VARCHAR | The name of the registered catalog to detach. |
cascade | BOOLEAN | Optional. If true, PGAA automatically drops all local table definitions associated with this catalog before detaching. Default is false. |
Returns
The function returns the row from the pgaa.catalog system table for the catalog being detached.
| Column | Type | Description |
|---|---|---|
name | TEXT | The name of detached catalog. |
type | pgaa.catalog_type | The catalog type. |
status | pgaa.catalog_status | The new status, which will be detached. |
pgaa.test_catalog()
Tests the connectivity and configuration of a registered Iceberg catalog. This function verifies that the Postgres instance can communicate with the remote catalog endpoint and, optionally, validates that the provided credentials have write permissions.
Synopsis
SELECT pgaa.test_catalog('catalog_name', test_writes:=true);
Parameters
| Parameter | Type | Description |
|---|---|---|
name | TEXT | The name of the registered catalog to test. |
text_writes | BOOLEAN | If true, the function attempts a write operation to the catalog metadata service to verify permissions. If false, only read permissions are tested. |
Returns
Returns NULL if the test is successful. Returns a descriptive error message if the test fails.
pgaa.list_catalog_tables()
Returns a list of all tables and views available in a registered Iceberg catalog. This function allows you to explore the contents of a remote catalog without having to import or attach the tables to your local database first.
Synopsis
SELECT * FROM pgaa.list_catalog_tables('catalog_name', 'namespace_filter');
Parameters
| Parameter | Type | Description |
|---|---|---|
catalog_name | TEXT | The name of the registered catalog to explore. |
namespace_filter | TEXT | If provided, specifies the Iceberg namespace (schema) to filter by. If omitted or NULL, all tables in the catalog are returned. Default is NULL. |
Returns
| Column | Type | Description |
|---|---|---|
schema_name | TEXT | The remote Iceberg namespace/schema. |
table_name | TEXT | The name of the table or view. |
pgaa.drop_catalog_tables()
Removes all local Postgres table and view definitions that are managed by a specific Iceberg catalog, including any dependent objects if cascade is true. It does not affect tables in the remote Iceberg catalog.
Synopsis
SELECT * FROM pgaa.drop_catalog_tables('catalog_name', cascade := true);
Parameters
| Parameter | Type | Description |
|---|---|---|
catalog_name | VARCHAR | The name of the registered catalog to whose managed tables will be removed. |
cascade | BOOLEAN | If true, the function automatically drops objects that depend on these tables. Default is false. |
Returns
| Column | Type | Description |
|---|---|---|
schema_name | TEXT | The local Postgres schema where the table resided. |
table_name | TEXT | The name of the local table that was dropped. |
Spark functions
pgaa.spark_sql()
Executes a Spark SQL query directly on your Postgres cluster via the configured Spark Connect endpoint. This allows you to run Iceberg compaction routines or Spark functions that aren't available in Postgres.
See Spark procedures for a list of the available procedures.
To run this function, you must set the configuration parameter pgaa.spark_connect_url to point to an available Spark Connect service.
Synopsis
For a single catalog: