尚未开放。数据库还没有向账户开放。本页按目前正在构建的样子介绍它,开放前可能还会变化。
版本
数据库运行 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 会以快速关闭方式停止(未完成的事务回滚,并写入一个检查点)。