通过


Postgres 兼容性

重要

Lakebase 自动缩放在以下区域处于 Beta 版本:eastus2westeuropewestus

Lakebase 自动缩放是最新版本的 Lakebase,可自动缩放计算、缩放到零、分支和即时还原。 有关 与 Lakebase 预配的功能比较,请参阅 在版本之间进行选择

本页介绍 Lakebase Postgres 如何与标准 Postgres 兼容。 作为托管 Postgres 服务,存在一些差异和限制。

Postgres 版本支持

Lakebase 自动缩放支持 Postgres 16 和 Postgres 17。

Postgres 扩展支持

Lakebase 支持许多 Postgres 扩展。 有关完整列表,请参阅 Postgres 扩展

会话、内存和存储

会话上下文

Lakebase 降到零功能会在一段时间不活动后自动关闭空闲连接。

关闭连接后,会话上下文中的任何内容(如临时表、已准备的语句、公告锁和 NOTIFYLISTEN 命令)都将丢失。

若要避免丢失会话级上下文,可以禁用缩放至零。 但是,这样做意味着计算运行 24/7。

内存

SQL 查询和索引生成可以生成可能不适合内存中的大量数据。 计算的大小决定了可用内存量。

无日志记录的表

未登录的表是不写入 Postgres 写前日志 (WAL) 的表。 这些表存储在计算本地存储中,在计算重启或计算缩放到零时不会持久保存。 这与标准 Postgres 不同,其中未记录的表仅在异常进程终止时被截断。 此外,未记录的表受限于计算机本地磁盘空间。 Lakebase 为 Postgres 使用的临时文件分配本地磁盘空间,空间大小为20 GiB或计算规模的最大值乘以15 GiB,以两者中的较大值为准。

临时表

临时表仅在会话的生存期内存在(或可选地在事务期间存在)。 与未记录的表一样,它们存储在计算本地存储中,并受本地磁盘空间的限制。

Postgres 日志

不支持访问 Postgres 日志。

统计信息集合

当 Postgres 运行的计算资源缩放到零时,由 Postgres 累积统计信息系统收集的统计信息不会被保存。 若要避免丢失统计信息,可以禁用从小到零的功能。 但是,禁用缩放为零也意味着计算资源将全天候运行。

Postgres 参数设置

作为托管 Postgres 服务,许多数据库参数都基于计算大小进行设置。 使用以下方法查看所有数据库参数设置:

SHOW ALL;

可以配置在会话、数据库或角色级别具有 user 上下文的参数。 不能在实例级别配置参数。

  • 显示可在会话、数据库或角色级别设置的参数。

    SELECT name
    FROM pg_settings
    WHERE context = 'user';
    
  • 设置会话的参数。

    SET maintenance_work_mem='1 GB';
    
  • 为连接到数据库的所有会话设置参数。

    ALTER DATABASE lakebase SET maintenance_work_mem='1 GB';
    
  • 为给定用户的所有会话设置参数。

    ALTER USER "john@company.com" SET maintenance_work_mem='1 GB';
    

数据库编码和排序规则

数据库编码

默认情况下,使用 C.UTF-8 排序规则。 C.UTF-8 支持各种 UTF-8 编码字符。

还支持 UTF8 编码(Unicode、8 位可变宽度编码)。

若要查看数据库的编码和排序规则,请运行以下查询:

SELECT
    pg_database.datname AS database_name,
    pg_encoding_to_char(pg_database.encoding) AS encoding,
    pg_database.datcollate AS collation,
    pg_database.datctype AS ctype
FROM
    pg_database
WHERE
    pg_database.datname = 'your_database_name';

注释

在 Postgres 中,创建数据库后无法更改数据库的编码或排序规则。

排序规则

排序规则是一个 SQL 架构对象,该对象将 SQL 名称映射至操作系统中安装的库提供的语言环境。

默认情况下,Lakebase 使用 C.UTF-8 排序规则。 Lakebase 支持的另一个提供程序是 icu,它使用外部 ICU 库。

Lakebase 提供了一整套 预定义的 icu 区域设置,以满足特定区域设置需求中的排序或大小写转换。

  • 查看所有预定义的区域设置:
SELECT * FROM pg_collation;
  • 使用预定义 icu 的区域设置创建数据库:
CREATE DATABASE my_arabic_db
LOCALE_PROVIDER icu
icu_locale 'ar-x-icu'
template template0;
  • 为各个列指定区域设置:
CREATE TABLE my_ru_table (
    id serial PRIMARY KEY,
    russian_text_column text COLLATE "ru-x-icu",
    description text
);

功能限制

角色和权限

  • 无法访问主机操作系统。
  • 无法使用 Postgres superuser进行连接。
    • 不允许任何需要 superuser 特权或直接本地文件系统访问的功能。
    • databricks_superuser 取代 Postgres superuser 角色。 有关与此角色关联的特权的信息,请参阅 “管理角色”。

复制

使用原生 PostgreSQL 逻辑复制功能进行向/从 Lakebase 数据库的数据复制功能尚不可用。

Tablespaces

Lakebase 不支持 Postgres 表空间。 尝试使用命令创建表空间 CREATE TABLESPACE 会导致错误。 这是因为 Lakebase 的托管云体系结构不允许对自定义存储位置进行直接文件系统访问。

如果现有应用程序或脚本使用表空间在不同的存储设备中组织数据库对象,则必须在迁移到 Lakebase 时删除或修改这些引用。