Skip to content

PostgreSQL

数据库运行的软件:PostgreSQL 16、17 或 18,带 pgvector、PostGIS、TimescaleDB、pg_cron 等;所有者可以创建的扩展、角色、新数据库如何初始化,以及平台固定的设置。尚未向账户开放。

更新于

尚未开放。数据库还没有向账户开放。本页按目前正在构建的样子介绍它,开放前可能还会变化。

版本

数据库运行 PostgreSQL 16、17 或 18(默认),使用官方的 Debian 构建,装在平台为该主版本准备的镜像中。数据库的主版本不会改变:要用下一个主版本,请新建一个数据库。

扩展

所有者不是超级用户,但可以用 CREATE EXTENSION 创建下面这些扩展:PostgreSQL 只允许超级用户创建的扩展,由一份允许列表 (pgextwlist) 代它创建。

扩展 说明
vector, vectorscale pgvector,以及 Tiger Data 的 pgvectorscale:向量及其索引。
postgis, postgis_raster, postgis_topology, postgis_tiger_geocoder, address_standardizer PostGIS。
timescaledb TimescaleDB,仅限其 Apache-2.0 部分。
pg_cron 在数据库内按计划运行任务;所有者可以使用 cron 模式。
pg_partman 随时间推移自动创建和删除分区。
pgaudit 语句的审计日志。
pg_textsearch 按 BM25 排序的全文搜索:适用于 17 和 18。
pg_hint_plan, hypopg, pg_repack 给查询规划器的提示、假设索引,以及无需长时间加锁的表和索引重组。
pg_stat_statements 每条语句的开销。
PostgreSQL 自带的模块 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,以及其他大部分 contrib 模块。

pg_stat_statements、pg_cron、pgaudit 和 timescaledb 在 PostgreSQL 启动时加载,17 和 18 上还会加载 pg_textsearch。特意不在列表中的有:能访问服务器文件的 file_fdw 和 adminpack、pg_surgery,以及所有不受信任的过程语言。

角色

  • 所有者 <database_name>_owner(创建时没有另起数据库名则为 glacdb_owner)拥有这个数据库,属于角色组 glac_superuser,具有该组的各项属性:可以创建数据库和角色、绕过行级安全、复制、读写所有数据、监控、向其他会话发送信号、订阅(16 及以上)和维护(17 及以上),并能把这些权限授予他人。它不是超级用户。
  • 超级用户 postgres 只能以机器用户 postgres 的身份,通过机器本地的套接字登录;从不通过网络登录,也没有任何人知道它的密码。
  • 其他所有登录都用密码,采用 SCRAM。在平台设置之前,所有者没有密码;平台设置的是 SCRAM 校验值,密码本身从不到达机器。

新数据库如何初始化

数据库的集群并不是在创建数据库时才建立的:镜像里已经有一个在构建镜像时建好的集群(initdb,启用数据校验和),其中只有角色组、所有者和数据库,没有密码,也没有数据。第一次启动时,镜像把它复制到数据库的空云盘上,并按创建请求给数据库和所有者命名。此后,数据库写入的一切都在它自己的云盘上,用项目的密钥加密。从同一个镜像创建的数据库共享 PostgreSQL 的系统标识符 (pg_control),就像从同一个集群复制出来的集群一样。

压缩

  • 大值 (TOAST) 用 PostgreSQL 自己的默认算法 pglz 压缩 (default_toast_compression)。有需要的列 (ALTER TABLE … ALTER COLUMN … SET COMPRESSION lz4)、数据库或会话 (SET default_toast_compression = lz4) 可以改用 lz4:速度更快,但压缩后的值可能更大。
  • 预写日志中的整页镜像用 zstd 压缩 (wal_compression)。

平台固定的设置

平台每次启动时都会写入下面这些设置,它们排在 postgresql.conf 之后、你用 ALTER SYSTEM 设置的内容之前(你的设置会保留):

  • max_connections 按实例内存设定:1 GiB 时为 104,2 GiB 时为 209,4 GiB 时为 419(最少 25);shared_buffers 为内存的八分之一,最少 128 MB。
  • wal_level = replica,password_encryption 设为 SCRAM,以及上面说的压缩。
  • PostgreSQL 的日志写入数据库所属应用的日志,用 GET /v1/apps/{app}/logs 读取(日志)。

数据目录在数据库的云盘上,位于 /var/lib/postgresql/data;在实例被替换或删除之前,PostgreSQL 会以快速关闭方式停止(未完成的事务回滚,并写入一个检查点)。

导航

输入以搜索……

↑↓ 切换↵ 选择Esc 关闭