Skip to content

PostgreSQL

What a database runs: PostgreSQL 16, 17 or 18 with pgvector, PostGIS, TimescaleDB, pg_cron and more, the extensions its owner may create, the roles, how a new database begins, and the settings the platform keeps. Not open to accounts yet.

Actualizado el

Esta página aún no está traducida al español: aquí la tienes en inglés.

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_owner unless the create named the database otherwise), owns the database, and is in the role group glac_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 user postgres; 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). lz4 is 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_connections by the instance’s memory: 104 with 1 GiB, 209 with 2 GiB, 419 with 4 GiB (25 at the least); shared_buffers an eighth of its memory, 128 MB at the least.
  • wal_level = replica, password_encryption as SCRAM, and the compression above.
  • PostgreSQL’s log goes to the log of the database’s app, which GET /v1/apps/{app}/logs reads (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.

Navegación

Escribe para buscar…

↑↓ navegar↵ seleccionarEsc cerrar