「OushuDB」用户指南数据定义 创建和管理数据库 (中)

简介: CREATE DATABASE实际上是通过拷贝一个现有的数据库进行工作的。缺省时,它拷贝名为template1的标准系统数据库。所以该数据库是创建新数据库的”模板”。如果你给template1增加对象,这些对象将被拷贝到随后创建的用户数据库中。这样的行为允许节点对数据库中的标准套件进行修改。比如,如果你把过程语言PL/Perl安装到template1里,那么你在创建用户数据库的时候它们就会自动可得,而不需要额外的动作。

image.png

1、模板数据库
CREATE DATABASE实际上是通过拷贝一个现有的数据库进行工作的。缺省时,它拷贝名为template1的标准系统数据库。所以该数据库是创建新数据库的”模板”。如果你给template1增加对象,这些对象将被拷贝到随后创建的用户数据库中。这样的行为允许节点对数据库中的标准套件进行修改。比如,如果你把过程语言PL/Perl安装到template1里,那么你在创建用户数据库的时候它们就会自动可得,而不需要额外的动作。
系统里还有名为template0的第二个标准系统数据库,这个数据库包含和template1初始时一样的数据内容,也就是说,只包含标准的OushuDB 对象。在数据库集群初始化之后,我们不应该对template0做任何修改。通过告诉CREATE DATABASE使用 template0而不是template1进行拷贝,你可以创建一个”纯净” 的用户数据库,它不会包含任何template1里所特有的东西。这一点在恢复pg_dump转储的时候是非常方便的:转储脚本应该在一个纯净的数据库中恢复以确保我们正确创建了被转储出的数据库内容,而不会随后和可能已经添加到template1中的对象相冲突。
要通过拷贝template0的方法创建一个数据库,可使用:

CREATE DATABASE dbname TEMPLATE template0;

用于 SQL 环境,或:

createdb -T template0 dbname

用于 shell 环境。
我们可以创建额外的模板数据库,而且实际上我们可以在一个集群中通过将CREATE DATABASE的模板声明为相应的数据库名拷贝任何数据库。不过,我们必须明白,这个功能并非一般性的”COPY DATABASE”工具。实际上,在拷贝操作的过程中,源数据库必需是空闲状态(没有正在处理的数据修改事务)。如果在CREATE DATABASE开始的时候存在其它连接,那么操作将会失败,在拷贝期间,到源数据库的新连接都被阻止直到创建完成。
在pg_database里有两个有用的标志可以用于每个数据库:datistemplate和datallowconn字段。datistemplate 表示该数据库是准备用作CREATE DATABASE模板的。如果设置了这个标志,那么该数据库可以由任何有CREATEDB权限的用户克隆;如果没有设置,那么只有超级用户和该数据库的所有者可以克隆它。如果datallowconn为假,那么将不允许与该数据库发生任何新的连接(不过现有的会话不会因为把该标志设置为假而终止)。template0数据库通常被标记为datallowconn = false以避免对它的修改。template0和template1都应该总是标记为datistemplate = true。
Note
template1和template0没有任何特殊的状态,除了template1是CREATE DATABASE的缺省源数据库名之外。比如, 我们可以删除template1然后从template0中创建它而不会有任何不良效果。如果我们不小心在template1里加了一堆垃圾,那么我们就会建议做这样的操作。(要删除template1,必须使pg_database.datistemplate = false)在初始化数据库集群的时候,也会创建postgres数据库。这个数据库用于作为用户和应用连接的缺省数据库。它只是template1的一个简单拷贝,需要的时候可以删除或者重建。

目录
相关文章
|
5天前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
14 3
|
1月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
11天前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
14天前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
73 4
|
15天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云瑶池在2024云栖大会上重磅发布由Data+AI驱动的多模数据管理平台DMS:OneMeta+OneOps,通过统一、开放、多模的元数据服务实现跨环境、跨引擎、跨实例的统一治理,可支持高达40+种数据源,实现自建、他云数据源的无缝对接,助力业务决策效率提升10倍。
|
16天前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
42 3
|
15天前
|
测试技术 API 数据库
云数据库之添加数据
云数据库之添加数据
17 1
|
16天前
|
存储 关系型数据库 MySQL
MySQL数据库数据块大小
MySQL数据库数据块大小
33 1
|
28天前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
17天前
|
存储 监控 关系型数据库
MySQL数据库数据块大小详解
MySQL数据库数据块大小详解
35 0