Deepgreen(Greenplum) 模板数据库template0和template1 探讨

        平时工作中,我们在进行数据库创建时(CREATE DATABASE),实际上通过拷贝一个已有数据库的方式完成的。语法如下:

CREATE DATABASE name [ [WITH] [OWNER [=] dbowner]
                     [TEMPLATE [=] template]
                     [ENCODING [=] encoding]
                     [TABLESPACE [=] tablespace]
                     [CONNECTION LIMIT [=] connlimit ] ]

        默认情况下,它拷贝名为template1的标准系统数据库。所以该数据库是创建新数据库的"模板"。 如果我们为template1数据库增加对象,这些对象将被拷贝到后续创建的用户数据库中。 这种行为允许对数据库中标准对象集合的站点本地修改。例如,如果你把过程语言PL/Perl安装到 template1中,那么你在创建用户数据库后不需要额外的操作就可以使用该语言。

        系统里还有名为template0的第二个标准系统数据库。这个数据库包含和template1初始内容一样的数据,也就是说,只包含你的Greenplum版本预定义的标准对象。在数据库集簇被初始化之后,不应该对template0做任何修改(当然这个数据库默认是不允许连接的)。通过指示CREATE DATABASE使用template0取代template1进行拷贝,你可以创建一个"纯净的"用户数据库,它不会包含任何template1中的站点本地附加物。 这一点在恢复一个pg_dump转储时非常方便:转储脚本应该在一个纯净的数据库中恢复以确保我们重建被转储数据库的正确内容,而不和任何现在可能已经被加入到template1中的附加物相冲突。

        另一个从template0而不是template1复制的常见原因是,可以在复制template0时指定新的编码和区域设置,而一个template1的副本必须使用和它相同的设置。这是因为的template1可能包含编码相关或区域相关的数据,而template0中没有。

要通过拷贝template0来创建一个数据库,使用:SQL 环境中的
CREATE DATABASE dbname TEMPLATE template0;

或者 shell 中的
createdb -T template0 dbname

        可以创建额外的模板数据库,并且实际上可以通过将集簇中任意数据库指定为CREATE DATABASE的模板来从该数据库拷贝。不过,我们必需明白,这个功能并不是设计作为一般性的"COPY DATABASE"功能。主要的限制是当源数据库被拷贝时,不能有其他会话连接到它。如果在CREATE DATABASE开始时存在任何其它连接,那么该命令将会失败。在拷贝操作期间,到源数据库的新连接将被阻止。

        创建数据库示例:

创建一个新数据库gpdb:
CREATE DATABASE gpdb;
创建一个新数据库sales,所有者salesapp,默认表空间salesspace:
CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;
创建一个新数据库music,支持字符集ISO-8859-1:
CREATE DATABASE music ENCODING 'LATIN1';

        对于每一个数据库在pg_database中存在两个有用的标志: datistemplate和datallowconn列。datistemplate可以被设置来指示该数据库是不是要作为CREATE DATABASE的模板。如果设置了这个标志,那么该数据库可以被任何有 CREATEDB权限的用户克隆;如果没有被设置,那么只有超级用户和该数据库的拥有者可以克隆它。如果datallowconn为假,那么将不允许与该数据库建立任何新的连接(但已有的会话不会因为把该标志设置为假而被中止)。template0通常被标记为datallowconn = false来阻止对它的修改。template0和template1通常总是被标记为datistemplate = true。

template1=# select * from pg_database where datname like 'template%';
 datname | datdba | encoding | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datconfig | datacl
-----------+--------+----------+---------------+--------------+--------------+---------------+--------------+---------------+-----------+----------------------------------
 template1 | 10 | 6 | t | t | -1 | 10898 | 888 | 1663 | | {=c/dgadmin,dgadmin=CTc/dgadmin}
 template0 | 10 | 6 | t | f | -1 | 10898 | 888 | 1663 | | {=c/dgadmin,dgadmin=CTc/dgadmin}
(2 rows)

        注意: 除了template1是CREATE DATABASE的默认源数据库名之外, template1和template0没有任何特殊的状态。例如,我们可以删除template1然后从template0重新创建它而不会有任何不良效果。如果我们不小心在template1中增加了一堆垃圾,那么我们就会建议做这样的操作(要删除template1,它必须有pg_database.datistemplate = false)。

        当数据库集簇被初始化时,也会创建postgres数据库。这个数据库用于做为用户和应用连接的默认数据库。它只是 template1的一个拷贝,需要时可以删除并重建。

时间: 2024-09-14 12:46:14

Deepgreen(Greenplum) 模板数据库template0和template1 探讨的相关文章

Deepgreen & Greenplum DBA小白普及课之一(一般问题解答)

不积跬步无以至千里,要想成为一名合格的数据库管理员,首先应该具备扎实的基础知识及问题处理能力.本文参考Pivotal官方FAQ,对一些在使用和管理Deepgreen & Greenplum时经常会遇到的普通问题进行解答.希望对大家有所帮助,如果有朋友有更多的问题分享,请留言,我将一并整理. 下面单刀直入,开始问题浏览及解决思路梳理: 1.如何检查一张表的分区策略? 测试表:region 表的详细描述信息可以展示其分区策略:Distributed by: (r_regionkey) tpch=#

Deepgreen & Greenplum 高可用(一) - Segment节点故障转移

尚书中云:惟事事,乃其有备,有备无患.这教导我们做事一定要有准备,做事尚且如此,在企事业单位发展中处于基础地位的数据仓库软件在运行过程中,何尝不需要有备无患呢? 今天别的不表,主要来谈谈企业级数据仓库软件Deepgreen和Greenplum的高可用特性之一:计算节点镜像. 一.首先从理论上来讲,正常Segment节点和他的Mirror是分布在不同主机上的,以防止单点故障导致的数据库访问异常.当正常Segment节点出现故障时,Mirror节点可以自动接管Segment节点的服务,数据库仍然可以

Deepgreen & Greenplum DBA小白普及课之二(管理问题解答)

不积跬步无以至千里,要想成为一名合格的数据库管理员,首先应该具备扎实的基础知识及问题处理能力.本文参考Pivotal官方FAQ,对在管理Deepgreen & Greenplum时经常会遇到的问题提出解决思路/答案.希望对大家有所帮助,如果有朋友有更多的问题分享,请留言,我将一并整理. 下面单刀直入,开始问题浏览及解决思路梳理: 1.执行gpstart命令失败了,我该怎么办? 查看gpstart命令在Master执行失败后返回的错误原因: 检查gpstart的启动日志,这里可能存着更详细的信息,

Deepgreen & Greenplum DBA小白普及课之三(备份问题解答)

不积跬步无以至千里,要想成为一名合格的数据库管理员,首先应该具备扎实的基础知识及问题处理能力.本文参考Pivotal官方FAQ,对在管理Deepgreen & Greenplum时经常会遇到的问题提出解决思路/答案,本篇主要讲备份方面的问题.希望对大家有所帮助,如果有朋友有更多的问题分享,请留言,我将一并整理. 1.简单描述一下Deepgreen & Greenplum的备份架构? 当我们执行全库备份操作时,后台进行了如下操作: 检查备份命令语法 检查备份目录是否存在,如果不存在便创建目录

Deepgreen & Greenplum DBA小白普及课之四(性能问题解答)

不积跬步无以至千里,要想成为一名合格的数据库管理员,首先应该具备扎实的基础知识及问题处理能力.本文参考Pivotal官方FAQ,对在管理Deepgreen & Greenplum时经常会遇到的问题提出解决思路/答案,本篇主要讲性能方面的问题.希望对大家有所帮助,如果有朋友有更多的问题分享,请留言,我将一并整理. 1.我的SQL查询昨天性能还不错,到今天就变得非常慢了,我该怎么办? 如果你的SQL不是在数据库Master主机上执行了,是远程执行的,那么可以通过在Master主机上执行SQL看返回是

建模工具与Deepgreen/Greenplum的集成(连续更新)

今天测试了一下各个建模工具与Deepgreen/Greenplum的集成,结果会连续发出来. 1.与ERWin集成 目前ERWin还不支持数据库连接到PostgreSQL,Greenplum和Deepgreen. 2.与PowerDesigner集成 目前最新版本的PowerDesigner 16.5 版本,已经集成支持Greenplum4.2版本. 更新于2017年8月22日 PowerDesigner从网上下载的破解版本属于老版本,不支持Greenplum4.2,当然也不支持Deepgree

Deepgreen & Greenplum 高可用(二) - Master故障转移

上一篇文章中提到了Segment节点的故障转移,其中主要涉及Mirror添加.故障自动切换.故障修复后balanced到原集群状态,以及一些建议.具体请移步传送门--><Deepgreen & Greenplum 高可用(一) - Segment节点故障转移>. 书接上文,今天来谈一谈Master节点的故障转移. 一.首先从理论上来讲,要达到Master节点的单点保障,Master Standby要与Master部署在不同的服务器上.当Master节点故障时,同步程序停止,此时手

Deepgreen/Greenplum删除节点步骤

Greenplum和Deepgreen官方都没有给出删除节点的方法和建议,但实际上,我们可以对节点进行删除.由于不确定性,删除节点极有可能导致其他的问题,所以还行做好备份,谨慎而为.下面是具体的步骤: 1.查看数据库当前状态(12个实例) [gpadmin@sdw1 ~]$ gpstate 20170816:12:53:25:097578 gpstate:sdw1:gpadmin-[INFO]:-Starting gpstate with args: 20170816:12:53:25:0975

谈谈Deepgreen(Greenplum)中文编码

很多国内客户对中文编码要求比较苛刻,今天我们来聊聊中文编码问题. 概念 Deepgreen和Greenplum是基于PostgreSQL 8.2版本. PostgreSQL 8.2能够以各种字符集存储文本,比如 ISO-8859 系列和 EUC(扩展 Unix 编码).UTF-8 .Mule 国际编码.缺省的字符集是在使用 initdb 初始化数据库集群的时候选择的.在你创建数据库的时候是可以覆盖这个缺省的.因此,你可以有多个数据库,每个都有不同的字符集. PostgreSQL 8.2只支持以U