LakeBase Catalog使用说明

更新时间:
复制 MD 格式

本文介绍LakeBase Catalog的安装启用、通用SQL语法、权限管理和运维配置。各类型Catalog的创建选项和示例,请参见对应的操作指南。

安装与启用

LakeBase Catalog模块内置于polar_csi扩展,无需单独安装。执行以下SQL启用该功能:

-- 会话级打开
SET polar_csi.enable_lakebase = on;
-- 会话级关闭
SET polar_csi.enable_lakebase = off;

-- 全局打开(无需重启)
ALTER SYSTEM SET polar_csi.enable_lakebase = on;
SELECT pg_reload_conf();
-- 全局关闭(无需重启)
ALTER SYSTEM SET polar_csi.enable_lakebase = off;
SELECT pg_reload_conf();

快速开始

以下示例展示LakeBase Catalog的基本使用流程:

-- 创建 Lance catalog
CREATE CATALOG demo TYPE lance OPTIONS (
    dbname 'oss://bucket/lance_ns',
    oss_endpoint  'oss-cn-hangzhou.aliyuncs.com',
    oss_access_key_id 'AK_EXAMPLE_ID',
    oss_access_key_secret 'AK_EXAMPLE_SECRET'
);

-- 创建表并写入数据
CREATE TABLE demo.main.users (id INT, name TEXT, age INT);
INSERT INTO demo.main.users VALUES (1, '张三', 28), (2, '李四', 35);

-- 查询
SELECT * FROM demo.main.users WHERE age > 30;

-- 清理
DROP TABLE demo.main.users;
DROP CATALOG demo;

通过catalog.schema.table三段名即可访问对应格式的表数据。

支持的Catalog类型

类型

说明

操作指南

lance

Lance向量数据湖,适用于AI/ML向量检索场景

Lance表操作指南

paimon

Apache Paimon流批一体数据湖

Paimon表操作指南

postgres

本地PostgreSQL表,适用于跨库查询和联合查询

PostgreSQL表操作指南

duckdb

DuckDB本地分析引擎,适用于OLAP分析场景

DuckDB表操作指南

通用SQL语法

CREATE CATALOG

CREATE [ OR REPLACE ] CATALOG [ IF NOT EXISTS ] catalog_name
    TYPE { lance | paimon | postgres | duckdb }
    [ OPTIONS ( option_name 'option_value' [, ...] ) ];

参数

说明

catalog_name

Catalog 名称。未加引号时自动折叠为小写,遵循 PostgreSQL 标识符规则。

TYPE

Catalog 类型。支持 lancepaimonpostgresduckdb

OPTIONS

可选的键值对配置,用于传递特定参数。各类型CatalogOPTIONS参数不同,请参见对应的操作指南。

IF NOT EXISTS

Catalog已存在时跳过,不报错。

OR REPLACE

Catalog已存在时替换。

DROP CATALOG

删除Catalog元数据。底层存储文件不会被删除。如果当前会话已将该Catalog设置为默认Catalog,DROP会拒绝执行(错误码ERRCODE_OBJECT_IN_USE),需先执行RESET CATALOG

DROP CATALOG [ IF EXISTS ] catalog_name;

ALTER CATALOG

  • 语法

    ALTER CATALOG catalog_name RENAME TO new_name;
    ALTER CATALOG catalog_name OWNER TO new_owner;
  • 权限要求:Catalog owner或高权限用户。

  • 行为说明

    • RENAME:将Catalog重命名为 new_name。目标名称不能是保留名称(如 pg_catalog),也不能与当前数据库名冲突,且不能与已有 Catalog 重名。

    • OWNER TO:将Catalog的所有者变更为 new_owner。变更时会同步更新Catalog上已有的数据访问权限(ACL)条目,将旧 owner 的权限映射到新 owner。如果新 owner 与当前 owner 相同,则为空操作。

查看Catalog信息

SHOW CATALOGS

  • 语法

    SHOW CATALOGS;
  • 输出结果说明

    列名

    说明

    catalog_name

    Catalog名称

    catalog_type

    类型(lancepaimonpostgresduckdb

    uri

    当前数据库名

    comment

    注释

DESCRIBE CATALOG

显示Catalog的详细属性。当数据访问权限(ACL)列为空(即从未执行过 GRANT)时,会显示为 (owner only)

  • 语法

    DESCRIBE CATALOG catalog_name;
    DESC CATALOG catalog_name;          -- 等价简写
  • 输出结果说明

    属性

    说明

    catalog_name

    Catalog名称

    catalog_type

    类型(lancepaimonpostgresduckdb

    comment

    注释

    options

    创建时指定的 OPTIONS,以 JSON 格式展示(无 OPTIONS 时为空)

    acl

    权限列表

  • 示例

       property   |         value
    --------------+------------------------
     catalog_name | lance_local
     catalog_type | lance
     comment      |
     options      | {"dbname": "lance_ns"}
     acl          | (owner only)
    (5 rows)

SHOW CREATE CATALOG

输出可重新执行的 CREATE CATALOG DDL 语句,包含 TYPE 和 OPTIONS 信息。

SHOW CREATE CATALOG catalog_name;
说明

输出结果中不会明文显示敏感加密的信息,例如AccessKeyAccessKeySecret以及password等信息。

COMMENT ON CATALOG

权限要求:Catalog owner或高权限用户。

COMMENT ON CATALOG catalog_name IS '描述文字';
COMMENT ON CATALOG catalog_name IS NULL;        -- 清除注释

SchemaTable管理

SCHEMA

  • 语法

    CREATE SCHEMA [ IF NOT EXISTS ] catalog_name.schema_name;
    DROP SCHEMA [ IF EXISTS ] catalog_name.schema_name [ CASCADE | RESTRICT ];
  • 示例

    CREATE SCHEMA demo.analytics;
    SHOW SCHEMAS FROM demo;
    DROP SCHEMA demo.analytics;

TABLE

  • CREATE / DROP TABLE

    CREATE TABLE catalog_name.schema_name.table_name ( column_def [, ...] );
    DROP TABLE catalog_name.schema_name.table_name;

    column_def(列定义)使用 DuckDB 类型语法:INTBIGINTDOUBLETEXT/VARCHARBOOLEANDATETIMESTAMPDECIMAL(p,s) 等。

  • SHOW TABLES / DESCRIBE TABLE / SHOW CREATE TABLE

    SHOW TABLES FROM catalog_name.schema_name;
    SHOW TABLES FROM catalog_name;
    DESCRIBE TABLE catalog_name.schema_name.table_name;
    DESC TABLE catalog_name.schema_name.table_name;
    SHOW CREATE TABLE catalog_name.schema_name.table_name;

USE / SET CATALOG / SWITCH / RESET

-- 设置默认 catalog(以下三种等价)
USE catalog_name;
SET CATALOG catalog_name;
SWITCH catalog_name;

-- 同时设置 catalog 和 schema
USE catalog_name.schema_name;

-- 设置默认 schema
SET SCHEMA schema_name;

-- 查看当前设置
SHOW CATALOG;
SHOW SCHEMA;

-- 重置
RESET CATALOG;          -- 清除默认 catalog 和 schema
RESET SCHEMA;           -- 仅清除默认 schema

设置默认Catalog后,可使用二段名(schema.table)访问数据。

重要

执行USE catalog_name后,PostgreSQL本地表将无法通过两段名访问。如需访问本地表,请写完整的三段名,或创建postgres类型的Catalog来访问。

GRANT / REVOKE ON CATALOG

权限要求:Catalog owner或高权限用户。

GRANT { USAGE | CREATE | ALL [ PRIVILEGES ] }
    ON CATALOG catalog_name TO role_name [, ...];

REVOKE { USAGE | CREATE | ALL [ PRIVILEGES ] }
    ON CATALOG catalog_name FROM role_name [, ...];

SHOW GRANTS ON CATALOG catalog_name;

EXPLAIN

EXPLAIN SELECT * FROM demo.main.orders WHERE amount > 50;
EXPLAIN ANALYZE SELECT * FROM demo.main.orders;

数据操作示例

DDL

Schema 管理

CREATE SCHEMA demo.analytics;
CREATE SCHEMA IF NOT EXISTS demo.analytics;
SHOW SCHEMAS FROM demo;
DROP SCHEMA demo.analytics;
DROP SCHEMA IF EXISTS demo.analytics CASCADE;

Table 管理

CREATE TABLE demo.main.orders (
    id        INT,
    customer  VARCHAR,
    amount    DOUBLE,
    order_ts  TIMESTAMP
);
SHOW TABLES FROM demo.main;
DESCRIBE TABLE demo.main.orders;
SHOW CREATE TABLE demo.main.orders;
DROP TABLE demo.main.orders;

DML

-- 插入
INSERT INTO demo.main.orders VALUES
    (1, 'Alice', 99.50,  '2026-01-15 10:00:00'),
    (2, 'Bob',   250.00, '2026-02-20 14:30:00');

-- 查询
SELECT customer, amount FROM demo.main.orders WHERE amount > 100;

-- 更新
UPDATE demo.main.orders SET amount = 100.00 WHERE id = 1;

-- 删除
DELETE FROM demo.main.orders WHERE id = 2;

-- 聚合
SELECT count(*), sum(amount) FROM demo.main.orders;

权限管理

Catalog 管理权限

操作

所需权限

CREATE CATALOG

高权限用户

DROP / RENAME / COMMENT ON CATALOG

Catalog owner或高权限用户

ALTER CATALOG ... OWNER TO

Catalog owner或高权限用户

GRANT / REVOKE ON CATALOG

Catalog owner或高权限用户

说明

Catalog owner为执行CREATE CATALOG的用户,自动记录。可通过ALTER CATALOG ... OWNER TO转移。

数据访问权限(ACL)

权限

允许的操作

USAGE

SELECT、INSERT、UPDATE、DELETE

CREATE

CREATE/DROP TABLE、CREATE/DROP SCHEMA

ALL

USAGE + CREATE

规则说明

  • 新建Catalog默认所有非owner的普通用户被拒绝访问。

  • 执行GRANTACL生效,未授权用户被拒绝。

  • REVOKE ALL后仅 owner 和高权限用户可访问。

  • ACL 在三段名数据路径上强制执行(SELECT / DML / DDL 均检查)。

示例

CREATE ROLE analyst LOGIN;
CREATE CATALOG reports TYPE duckdb;
CREATE TABLE reports.main.sales (id INT, amount DOUBLE);

GRANT USAGE ON CATALOG reports TO analyst;
SET ROLE analyst;
SELECT * FROM reports.main.sales;              -- OK
CREATE TABLE reports.main.tmp (x INT);         -- ERROR: Requires CREATE privilege
RESET ROLE;

REVOKE USAGE ON CATALOG reports FROM analyst;
SET ROLE analyst;
SELECT * FROM reports.main.sales;              -- ERROR: Requires USAGE privilege
RESET ROLE;

SHOW GRANTS ON CATALOG reports;

运维配置

参数

默认值

说明

polar_csi.enable_lakebase

false

功能总开关

polar_csi.default_catalog

会话默认Catalog

polar_csi.default_schema

会话默认Schema

polar_csi.catalog_metacache_max_entries

256

元数据缓存条目上限

polar_csi.catalog_metacache_ttl

300000

元数据缓存TTL(毫秒)

polar_csi.lakebase_log_statement

none

含义同PostgreSQLlog_statement。取值范围:

  • none

  • ddl

  • mod

  • all

已知限制

  • 当前仅支持lancepaimonpostgresduckdb四种Catalog类型。

  • 暂不支持Extended Query协议,三段名查询不能通过PREPARE / EXECUTE执行。

  • 不支持跨节点的读写一致性。