热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

1、模板数据库CRE


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的一个简单拷贝,需要的时候可以删除或者重建。


推荐阅读
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 本文详细介绍了在 Ubuntu 16.04 系统上安装和配置 PostgreSQL 数据库的方法,包括如何设置监听地址、启用密码加密、更改默认用户密码以及调整客户端访问控制。 ... [详细]
  • 本文作为《WM平台上使用Sybase Anywhere 11》系列的第二篇,将继续探讨在Windows Mobile (WM) 系统中如何高效地操作Sybase Anywhere 11数据库。继上一篇关于安装与基本测试的文章之后,本篇将深入讲解数据库的具体操作方法。 ... [详细]
  • 本文介绍了如何在两个Oracle数据库(假设为数据库A和数据库B)之间设置DBLink,以便能够从数据库A中直接访问和操作数据库B中的数据。文章详细描述了创建DBLink前的必要准备步骤以及具体的创建方法。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 本文探讨了在SQL Server 2008环境下,当尝试删除拥有数据库架构的用户时遇到的问题及解决方案,包括如何查询和更改架构所有权。 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
  • 本文介绍了如何在 SQL Server 2005 中创建和使用数据库快照,包括创建数据库、数据表、插入数据、创建快照、查询快照数据以及使用快照进行数据恢复等操作。 ... [详细]
author-avatar
林健铭丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有