français : cette page n’est pas encore traduite, la voici en anglais.
Not open yet. Database is not open to accounts yet. This page says how it works as it is built, ahead of its opening, and may change before then.
Versions
A database runs PostgreSQL 16, 17 or 18 (the default), the official Debian build, in the platform’s image of that major version. A database keeps its major version: make another to move to the next.
Extensions
The owner creates the extensions below with CREATE EXTENSION, though it is no superuser: an allow-list (pgextwlist) makes for it those that PostgreSQL lets only a superuser make.
| Extension | What it is |
|---|---|
vector, vectorscale |
pgvector, and Tiger Data’s pgvectorscale: vectors and their indexes. |
postgis, postgis_raster, postgis_topology, postgis_tiger_geocoder, address_standardizer |
PostGIS. |
timescaledb |
TimescaleDB, its Apache-2.0 part alone. |
pg_cron |
Jobs on a schedule, in the database; the owner may use its schema cron. |
pg_partman |
Partitions made and dropped as time goes on. |
pgaudit |
Audit logging of statements. |
pg_textsearch |
Full-text search ranked by BM25: on 17 and 18. |
pg_hint_plan, hypopg, pg_repack |
Hints for the planner, hypothetical indexes, tables and indexes repacked without long locks. |
pg_stat_statements |
What each statement cost. |
| PostgreSQL’s own modules | pgcrypto, uuid-ossp, citext, hstore, ltree, pg_trgm, btree_gin, btree_gist, cube, earthdistance, fuzzystrmatch, unaccent, postgres_fdw, dblink, tablefunc, amcheck, pg_buffercache, pg_prewarm, pgstattuple, and most of the other contrib modules. |
pg_stat_statements, pg_cron, pgaudit and timescaledb are loaded when PostgreSQL starts, and pg_textsearch too on 17 and 18. Not on the list, on purpose: file_fdw and adminpack, which reach the server’s files, pg_surgery, and every untrusted procedural language.
Roles
- The owner,
<database_name>_owner(glacdb_ownerunless the create named the database otherwise), owns the database, and is in the role groupglac_superuser, with its attributes: it may make databases and roles, bypass row-level security, replicate, read and write all data, monitor, signal other sessions, subscribe (16 and later) and maintain (17 and later), and grant these. It is no superuser. - The superuser,
postgres, logs in on the machine’s own socket alone, as the machine’s userpostgres; never over the network, and with no password anybody has. - Every other login is by password, as SCRAM. The owner has none until the platform sets one, as a SCRAM verifier: the password itself never reaches the machine.
How a new database begins
A database’s cluster is not made when the database is: the image holds one made when it was built (initdb, with data checksums), with the role group, the owner and the database in it and nothing else: no password and no data. At its first start the image copies it onto the database’s empty Drive, and names the database and its owner as the create asked. From then on everything the database writes is on its own Drive, sealed with the project’s key. Databases made from one image share PostgreSQL’s system identifier (pg_control), as clusters copied from one cluster do.
Compression
- Large values (TOAST) are compressed with
pglz, PostgreSQL’s own default (default_toast_compression).lz4is there for a column (ALTER TABLE … ALTER COLUMN … SET COMPRESSION lz4), a database or a session (SET default_toast_compression = lz4) that asks for it: faster, for values that may come out larger. - The write-ahead log’s full-page images are compressed with
zstd(wal_compression).
Settings the platform keeps
The platform writes these at every start, after postgresql.conf and before what you set with ALTER SYSTEM, which it keeps:
max_connectionsby the instance’s memory: 104 with 1 GiB, 209 with 2 GiB, 419 with 4 GiB (25 at the least);shared_buffersan eighth of its memory, 128 MB at the least.wal_level = replica,password_encryptionas SCRAM, and the compression above.- PostgreSQL’s log goes to the log of the database’s app, which
GET /v1/apps/{app}/logsreads (logs).
The data directory is on the database’s Drive, at /var/lib/postgresql/data, and PostgreSQL is stopped with a fast shutdown (what is open is rolled back, and a checkpoint is written) before its instance is replaced or deleted.