pg_lake is configured through PostgreSQL settings. Set them in postgresql.conf, with ALTER SYSTEM, per database or user with ALTER DATABASE ... SET and ALTER ROLE ... SET, or per session with SET. For each parameter, set by says who can change it and when the change takes effect:
user: any user, with SET.
superuser: superusers, with SET or in the configuration.
reload: in the configuration, followed by SELECT pg_reload_conf().
restart: in the configuration, followed by a server restart.
The query engine itself, pgduck_server, is configured with command-line options; see pgduck_server options.
pg_lake_engine.hostDefault host=/tmp port=5332, set by restart
Connection string for pgduck_server.
pg_lake_engine.enable_cache_managerDefault on, set by superuser
Run a background worker that keeps the pgduck_server file cache under max_cache_size and fills it with recently queried files.
pg_lake_engine.max_cache_sizeDefault 20GB, set by superuser
Size limit for the file cache.
pg_lake_engine.cache_manager_intervalDefault 10s, set by superuser
Delay between cache manager runs.
pg_lake_engine.max_parallel_file_uploadsDefault 12, set by user
Maximum number of concurrent file uploads to object storage per write.
pg_lake_engine.log_engine_errorsDefault on, set by user
Log a short classification of query engine errors in the PostgreSQL log.
Iceberg tables
Parameter
Description
pg_lake_iceberg.default_location_prefixDefault none, set by superuser
URL prefix under which new Iceberg tables store their files, such as s3://bucket/iceberg.
pg_lake_iceberg.default_catalogDefault postgres, set by user
Catalog for new Iceberg tables: postgres, rest, object_store, or the name of a catalog server.
pg_lake_iceberg.default_compatibility_modeDefault auto, set by user
compatibility_mode for new Iceberg tables: auto or snowflake.
pg_lake_iceberg.unsupported_numeric_as_doubleDefault on, set by user
Store unbounded numeric and numeric with precision above 38 as double precision. When off, such columns are rejected.
pg_lake_iceberg.max_snapshot_ageDefault 1800, set by superuser
Seconds to retain old snapshots before VACUUM expires them. Overridden per table by max_snapshot_age.
pg_lake_iceberg.default_avro_writer_block_size_kbDefault 64kB, set by superuser
Block size for manifest (Avro) files.
Writes and files
Parameter
Description
pg_lake_table.target_file_size_mbDefault 512MB, set by user
Target size of data files; larger files are split during writes and compaction. A value below 1 disables splitting.
pg_lake_table.target_row_group_size_mbDefault 128MB, set by superuser
Target Parquet row group size. 0 disables the target.
pg_lake_table.default_parquet_versionDefault v1, set by superuser
Parquet format version for new files: v1 or v2.
pg_lake_table.copy_on_write_thresholdDefault 20, set by user
Percentage of deleted rows in a file above which a delete rewrites the file instead of writing a position delete file. 0 always rewrites, 100 never does.
pg_lake_table.max_open_files_for_partitioned_writeDefault 5000, set by superuser
Maximum number of partition staging files a write keeps open. See partitioning.
pg_lake_table.enable_partitioned_write_pushdownDefault off, set by user
Let DuckDB write partitioned INSERT ... SELECT and COPY FROM statements directly.
Query planning
Parameter
Description
pg_lake_table.enable_full_query_pushdownDefault on, set by user
Push whole queries down to DuckDB when every part of the query can run there.
pg_lake_table.enable_strict_pushdownDefault on, set by user
Only push down functions, operators and types whose DuckDB behavior is known to match PostgreSQL.
pg_lake_table.enable_data_file_pruningDefault on, set by superuser
Skip Iceberg data files whose column statistics rule out a match.
pg_lake_table.enable_partition_pruningDefault on, set by superuser
Skip Iceberg data files whose partition values rule out a match.