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

系统里还有名为 template0 的第二个标准系统数据库,这个数据库包含和 template1 初始时一样的数据内容,也就是说,只包含标准的 PostgreSQL 对象。在 initdb 之后,我们不应该对 template0 做任何修改。通过告诉 CREATE DATABASE 使用 template0 而不是 template1 进行拷贝,你可以创建一个"纯净"的用户数据库,它不会包含任何 template1 里所特有的东西。这一点在恢复 pg_dump 转储的时候是非常方便的:转储脚本应该在一个纯净的数据库中恢复以确保我们正确创建了被转储出的数据库内容,而不和任何现在可能已经存在于 template1 中的附加物相冲突。

要通过拷贝 template0 的方法创建一个数据库,可使用下列方法之一:

CREATE DATABASE dbname TEMPLATE template0;

createdb -T template0 dbname

前者用于 SQL 环境,后者用于 shell 环境。

我们可以创建额外的模板数据库,而且实际上我们可以在一个集群中通过将 CREATE
DATABASE
的模板声明为相应的数据库名拷贝任何数据库。不过,我们必需明白,这个功能并非一般性的"COPY
DATABASE
"工具。实际上,在拷贝操作的过程中,源数据库必需是空闲状态(没有正在处理的数据修改事务)。如果在
CREATE DATABASE 开始的时候存在其它连接,那么操作将会失败,否则在
CREATE DATABASE 的执行过程中新连接都将被锁定,直到拷贝完成。

pg_database
里有两个有用的标志可以用于每个数据库:datistemplate
datallowconn 字段。datistemplate 表示该数据库是准备用作 CREATE
DATABASE
模板的。如果设置了这个标志,那么该数据库可以由任何有 CREATEDB 权限的用户克隆;如果没有设置,那么只有超级用户和该数据库的所有者可以克隆它。如果
datallowconn
为假,那么将不允许与该数据库发生任何新的连接(不过现有的会话不会因为把该标志设置为假而被杀死)。template0 数据库通常被标记为 datallowconn
= false
以避免对它的修改。template0
template1 都应该总是标记为 datistemplate = true

【注意】template1template0 没有任何特殊的状态,除了 template1CREATE DATABASE
的缺省源数据库名之外。比如,我们可以删除 template1 然后从
template0 中创建它而不会有任何不良效果。如果我们不小心在
template1 里加了一堆垃圾,那么我们就会建议做这样的操作。

postgres模板数据库的更多相关文章

  1. PostegreSQL模板数据库

    模板数据库 模板数据库就是创建新database时,PostgreSQL会基于模板数据库制作一份副本,其中会包含所有的数据库设置和数据文件. CREATE DATABASE 实际上是通过拷贝一个现有的 ...

  2. postgres的数据库备份和恢复

    备份和恢复 一条命令就可以解决很简单: 这是备份的命令: pg_dump -h 127/0.0.1 -U postgres databasename > databasename.bak 指令解 ...

  3. C# T4 模板 数据库实体类生成模板(带注释,娱乐用)

     说明:..,有些工具生成实体类没注释,不能和SqlServer的MS_Description属性一起使用,然后照着网上的资源,随便写了个生成模板,自娱自乐向,其实卵用都没有参考教程    1.htt ...

  4. nodejs ejs模板数据库操作

    1. 建立数据连接setting.js var settings = {}; settings.db = { host: 'localhost', user: 'root', password: '1 ...

  5. postgres备份数据库

    1. psql --help psql is the PostgreSQL interactive terminal. Usage: psql [OPTION]... [DBNAME [USERNAM ...

  6. postgres 查询数据库所有表名

    select relname as TABLE_NAME ,col_description(c.oid, 0) as COMMENTS from pg_class cwhere relkind = ' ...

  7. node jade模板数据库操作

    /* Navicat MySQL Data Transfer Source Server         : localhost Source Server Version : 50519 Sourc ...

  8. postgres 备份数据库

    https://www.postgresql.org/docs/9.1/static/app-pgdump.html bash-4.2$ pg_dump -Fc xianlan_prod > / ...

  9. [Kong 与 Konga与postgres数据库] 之 Kuberneres 部署

    1.Kong的概述 Kong是一个clould-native.快速的.可扩展的.分布式的微服务抽象层(也称为API网关.API中间件或在某些情况下称为服务网格)框架.Kong作为开源项目在2015年推 ...

随机推荐

  1. Hadoop计算中的Shuffle过程(转)

    Hadoop计算中的Shuffle过程 作者:左坚 来源:清华万博 时间:2013-07-02 15:04:44.0 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解Ma ...

  2. strerror() 和perror()函数

    在linux编程中,strerror()是个好东东,因为一个孤零零的errno看不出个所以然,然而strerror()返回的错误描述已经给我们解决问题提供了80%的成功率.但从安全性的角度来讲,str ...

  3. efm32 si446x

    Linking target: example-trickle.stk3700arm-none-eabi-gcc -Xlinker -Map=example-trickle.stk3700.map - ...

  4. 简单文件系统构建ramdisk

    1.  BusyBox编译工具,包含bin, sbin, usr,  linuxrc. 2.  添加相关重要目录:dev,  etc,  mnt, proc,  sys, lib, var, tmp. ...

  5. div 背景自适应

    .bg { background: url(images/title_bg.jpg); filter: "progid:DXImageTransform.Microsoft.AlphaIma ...

  6. 直接拿来用!最火的Android开源项目(转)

    摘要:对于开发者而言,了解当下比较流行的开源项目很是必要.利用这些项目,有时能够让你达到事半功倍的效果.为此,CSDN特整理了GitHub上最受欢迎的Android及iOS开源项目,本文详细介绍了20 ...

  7. perl 函数的参数列表

    在perl中,定义一个函数的时候,不需要在圆括号内指定具体的参数,所有的参数都从@_ 这个列表中得到 代码示例: sub test { my ($a, $b) = @_; print qq{$a\t$ ...

  8. js实现密码强度

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. Spring-Condition设置

    为了满足不同条件下生成更为合适的bean,可以使用condition配置其条件.假如有一个bean,id为magicBean,只有当其具有magic属性时才生成,方法如下: javaConfig模式: ...

  10. 感谢各位亲们的大力支持,免费的HTML5学习课程《HTML5网页开发实例具体解释》连载已经结束了!

    感谢各位亲们的大力支持,免费的HTML5学习课程<HTML5网页开发实例具体解释>连载已经结束了.  有兴趣的读者能够看我的博客,也能够看以下的链接逐个学习: 当里个当.免费的HTML5连 ...