网站公司销售,石家庄市住房和建设局网站,网站建设怎么挣钱,园林景观设计公司官网查找所有的数据库
select datname from pg_database运行该命令后#xff0c;我们会发现其中出现了一些其它的数据库接下来#xff0c;我们分析 template0 和 template1 的作用。template1
template1 是 PostgreSQL 默认用于创建新数据库的模板。当执行 CREATE DATABASE new_d…查找所有的数据库
select datname from pg_database运行该命令后我们会发现其中出现了一些其它的数据库接下来我们分析 template0 和 template1 的作用。template1
template1 是 PostgreSQL 默认用于创建新数据库的模板。当执行 CREATE DATABASE new_db; 时PostgreSQL 实际上会复制 template1 的内容来创建 new_db。
这意味着
你可以修改 template1如果你在 template1 中添加了表、函数、扩展或其他对象那么之后所有基于 template1 创建的新数据库都会包含这些对象。这对于在所有新数据库中预装一些常用结构或扩展非常有用。需要小心修改虽然可以修改 template1但修改后所有新数据库都会继承这些修改。如果你只想某个数据库有特定对象最好在创建该数据库后再添加而不是修改 template1。template0
template0 也是一个模板数据库但它有一个关键特性它被设计成一个 “纯净”的模板。
这意味着不能修改 template0你不能直接在 template0 中添加、删除或修改对象。用于恢复或特定编码template0 的主要用途是当 template1 被修改后如果你需要创建一个完全没有任何自定义对象的新数据库时可以使用 template0。例如当你需要创建使用不同字符集编码的数据库时通常会基于 template0 来创建以确保编码的一致性。
你可以通过以下方式基于 template0 创建数据库
CREATE DATABASE my_clean_db TEMPLATE template0;简而言之template1 是你常用的模板可以自定义而 template0 是一个干净的、不可修改的模板用于特定情况比如创建纯净的数据库或者处理字符集问题。创建更多自定义的模板
创建一个普通的数据库 首先你需要创建一个常规的数据库。
CREATE DATABASE my_custom_template;配置你的新数据库 连接到这个新创建的数据库 (my_custom_template)并向其中添加所有你希望在新数据库中自动包含的对象。这包括
表结构CREATE TABLE视图CREATE VIEW函数和存储过程CREATE FUNCTION扩展CREATE EXTENSION 例如 uuid-ossp、pg_trgm 等。预设数据INSERT INTO权限设置GRANT-- 添加一个扩展
CREATE EXTENSION IF NOT EXISTS uuid-ossp;-- 创建一个表
CREATE TABLE users (id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,email VARCHAR(100) NOT NULL
);-- 插入一些初始数据
INSERT INTO users (username, email) VALUES (admin, adminexample.com);将数据库标记为模板 完成配置后断开与该数据库的所有连接。然后你需要修改其属性将其标记为一个模板。这个操作需要超级用户权限并且不能在连接到该数据库时执行。
update pg_database set datistemplate true where datname my_custom_template;根据模板创建数据库
create database mydb template my_custom_template注意
只有超级用户才能将数据库标记为模板。
断开连接 在将数据库标记为模板ALTER DATABASE ... IS TEMPLATE TRUE;之前必须确保没有其他会话连接到该数据库。否则操作会失败。
模板的修改 理论上你可以修改一个已经被标记为模板的数据库。但是当你修改它时所有当前连接到它的会话也必须被断开。最佳实践是如果你需要更新模板可以先将它设置为 IS TEMPLATE FALSE进行修改然后再设置为 IS TEMPLATE TRUE。查看有哪些template
SELECT datname
FROM pg_database
WHERE datistemplate TRUE;