pg_lake_table
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
pg_lake | 3.4 | OLAP | Apache-2.0 | C |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 2560 | pg_lake | Yes | Yes | Yes | Yes | No | No | lake |
| 2561 | pg_extension_base | No | Yes | Yes | Yes | No | No | extension_base |
| 2562 | pg_extension_updater | No | Yes | Yes | Yes | No | No | extension_updater |
| 2563 | pg_map | No | Yes | No | Yes | No | No | map_type |
| 2564 | pg_lake_engine | No | Yes | Yes | Yes | No | No | __lake__internal__nsp__ |
| 2565 | pg_lake_iceberg | No | Yes | No | Yes | No | No | lake_iceberg |
| 2566 | pg_lake_table | No | Yes | Yes | Yes | No | No | __pg_lake_table_writes |
| 2567 | pg_lake_copy | No | Yes | Yes | Yes | No | No | pg_catalog |
| Related | btree_gist pg_lake_engine pg_lake_iceberg pg_ducklake pg_mooncake columnar pg_parquet storage_engine orioledb pg_sorted_heap aws_s3 pg_bulkload file_fdw |
|---|---|
| Depended By | pg_lake pg_lake_copy |
pg_extension_base auto-loads pg_lake_engine, pg_lake_iceberg, and pg_lake_table in dependency order. Extension SQL/control version is 3.4; source and DEB/RPM package version is 3.4.0.
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| EXT | PIGSTY | 3.4 | 1817161514 | pg_lake | btree_gist, pg_lake_engine, pg_lake_iceberg |
| RPM | PIGSTY | 3.4.0 | 1817161514 | pg_lake_$v | - |
| DEB | PIGSTY | 3.4.0 | 1817161514 | postgresql-$v-pg-lake | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | N/A | N/A | N/A | N/A | N/A |
| el8.aarch64 | N/A | N/A | N/A | N/A | N/A |
| el9.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| el9.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| el10.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| el10.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d12.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d12.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d13.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d13.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u22.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u22.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u24.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u24.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u26.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u26.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
Build
You can build the RPM / DEB packages for pg_lake using pig build:
pig build pkg pg_lake # build RPM / DEB packages
Install
You can install pg_lake directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
pig repo add pgsql -u # Add repo and update cache
Install the extension using pig or apt/yum/dnf:
pig install pg_lake; # Install for current active PG version
pig ext install -y pg_lake -v 18 # PG 18
pig ext install -y pg_lake -v 17 # PG 17
pig ext install -y pg_lake -v 16 # PG 16
dnf install -y pg_lake_18 # PG 18
dnf install -y pg_lake_17 # PG 17
dnf install -y pg_lake_16 # PG 16
apt install -y postgresql-18-pg-lake # PG 18
apt install -y postgresql-17-pg-lake # PG 17
apt install -y postgresql-16-pg-lake # PG 16
Preload:
shared_preload_libraries = 'pg_extension_base';
Create Extension:
CREATE EXTENSION pg_lake_table CASCADE; -- requires: btree_gist, pg_lake_engine, pg_lake_iceberg
Usage
Sources:
- Official data-lake file query guide
- Official Iceberg table guide
- Version 3.4 control file
- FDW, server, utility, and access-method SQL
pg_lake_table exposes object-store files as PostgreSQL foreign tables and provides the USING iceberg table syntax. It owns the pg_lake and pg_lake_iceberg foreign servers, file inspection/cache utilities, table catalogs, and transaction hooks; Iceberg metadata encoding is delegated to pg_lake_iceberg.
Query External Files
Install the complete stack, including the required pg_lake_engine, pg_lake_iceberg, and btree_gist dependencies:
CREATE EXTENSION pg_lake CASCADE;
An empty column list asks pg_lake to infer the file schema:
CREATE FOREIGN TABLE external_events ()
SERVER pg_lake
OPTIONS (
path 's3://analytics-bucket/events/*.parquet',
filename 'true'
);
SELECT count(*) FROM external_events;
Create a writable Iceberg table through the extension-provided table access method:
CREATE TABLE managed_events (
event_time timestamptz,
payload jsonb
) USING iceberg;
File and Table Utility Index
lake_file.list(pattern): lists matching object paths, sizes, modification times, and ETags.lake_file.size(path)andlake_file.exists(path): inspect one remote object.lake_file.preview(url, format, compression): returns inferred column names and types.lake_file.delete(url): deletes a remote object; restrict it to roles that are allowed to remove data.lake_file_cache.add(path, refresh),remove(path), andlist(): manage the local file cache for members oflake_read.lake_iceberg.table_size(regclass): totals the current data-file sizes of an Iceberg table.- Foreign servers
pg_lakeandpg_lake_iceberg: read-file and writable-Iceberg entry points. - Access methods
icebergandpg_lake_iceberg: aliases used to translateCREATE TABLE ... USINGinto the extension’s foreign-table representation.
SELECT path, file_size
FROM lake_file.list('s3://analytics-bucket/events/**/*.parquet');
SELECT *
FROM lake_file.preview('s3://analytics-bucket/events/sample.parquet');
Operational Caveats
pg_extension_basemust be preloaded andpgduck_servermust be running with credentials for every referenced location.lake_read,lake_write, andlake_read_writecontrol access to servers, schemas, and utilities. Grant the narrowest role required by each application.- External tables are references to files, not imported copies. File replacement, cross-region access, and cache invalidation can change latency or results independently of PostgreSQL catalog state.
- Iceberg inserts are optimized for batches rather than single rows. Use a staging heap table for high-rate row-at-a-time ingestion and periodically flush batches.
- Internal
lake_table.*catalogs track files, field IDs, partitions, and recovery state. Do not modify them directly.
Feedback
Was this page helpful?
Thanks for the feedback! Please let us know how we can improve.
Sorry to hear that. Please let us know how we can improve.