You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在template1中创建Extensions和Domains并同步至新建数据库(SQL命令)

在PostgreSQL的template1中创建Extensions和Domains,让新数据库自动继承的方法

嘿,这个需求其实很常见!PostgreSQL的template1是默认的数据库模板,所有新创建的数据库都会默认从它复制结构和对象,所以只要在template1里建好你要的Extensions和Domains,后续新建的库就自动带上这些东西了。下面用纯SQL命令(完全适配Navicat这类图形化工具)一步步操作:

1. 先切换到template1数据库

在Navicat里,你可以直接在左侧数据库列表找到template1,右键打开查询窗口;如果想用SQL语句切换(比如在命令行psql环境下),可以执行:

\c template1

不过注意:有些环境下template1被设置为禁止连接,这时你需要先执行这条SQL开启连接权限:

ALTER DATABASE template1 WITH ALLOW_CONNECTIONS true;

操作完成后记得再改回去,避免误修改模板库:

ALTER DATABASE template1 WITH ALLOW_CONNECTIONS false;

2. 创建你需要的Extensions

比如要创建uuid-ossp扩展(用来生成UUID),执行:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

加IF NOT EXISTS是为了避免重复创建时抛出错误,非常实用。你可以把这里换成你需要的任何扩展,比如postgis、pgcrypto等等。

3. 创建自定义Domains

比如创建一个验证邮箱格式的自定义域,执行:

CREATE DOMAIN email AS VARCHAR(255)
CHECK (
    VALUE ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'
);

这个域会限制字段值必须符合邮箱格式。你可以根据需求修改约束条件,比如创建一个只能存正整数的域:

CREATE DOMAIN positive_int AS INTEGER
CHECK (VALUE > 0);

4. 验证效果

现在新建一个测试数据库(比如叫test_db),然后在这个新库的查询窗口执行:

-- 查看是否存在创建的扩展
SELECT extname FROM pg_extension;
-- 查看是否存在创建的域
SELECT typname FROM pg_domain;

如果能看到你之前创建的扩展和域,就说明配置成功了!

注意事项

  • 确保执行这些SQL的账号有足够权限:通常需要超级用户权限,或者被授予了CREATE EXTENSION和CREATE DOMAIN的权限。
  • 已经存在的数据库不会自动同步template1的修改,只有之后新建的数据库才会继承这些对象。

内容的提问来源于stack exchange,提问作者Johan van Zyl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:36:42