创建和管理数据库
创建和管理数据库
一个Greenplum数据库是Greenplum数据库的一个单一实例。 可能会安装有多个单独的Greenplum数据库系统,但是通常只会用环境变量设置选择其中一个。 详情请咨询用户的Greenplum管理员。
一个Greenplum数据库系统中可以有多个数据库。 这与某些数据库管理系统(如Oracle)不同,那些系统中数据库实例 就是数据库。 尽管用户可以在一个Greenplum系统中创建很多数据库,但是客户端程序一次只能连接上并且访问一个数据库,因此用户无法跨数据库进行查询。
关于模板和默认数据
Greenplum数据库提供了一些模板数据库和一个默认数据库, template1,template0和postgres。
默认情况下,每个新创建的数据库都是基于一个模板数据库。 Greenplum数据库默认使用template1作为模板,除非手动指定另一个模板。 不推荐在在模板数据库template1里创建对象。否则,对象将会出现在所有使用默认模板创建的数据库里。
Greenplum数据库内部使用另外一个模板数据库template0。 不要删除和更改template0。 你可以使用template0创建一个完全干净的,仅包含Greenplum数据库初始化时预定义好的标准对象的数据库。
你可以使用postgres作为第一次连接Greenplum数据库时使用的数据库。 Greenplum数据库使用postgres作为管理连接的默认数据库。 例如,postgres被启动进程,全局死锁检测进程和FTS(故障恢复服务)进程在访问catalog表时使用。
创建一个数据库
CREATE DATABASE命令会创建一个新的数据库。例如:
=> CREATE DATABASE new_dbname;
要创建一个数据库,用户必须具有创建一个数据库的特权或者是一个Greenplum数据库超级用户。 如果用户没有正确的特权,用户就不能创建数据库。 可以联系用户的Greenplum数据库管理员为用户授予必要的特权或者替用户创建一个数据库。
用户还可以使用客户端程序createdb来创建一个数据库。 例如,在一个使用提供的主机名和端口连接到Greenplum数据库命令行终端中运行下列命令,它将会创建一个名为mydatabase的数据库:
$ createdb -h masterhost -p 5432 mydatabase
上述主机名和端口必须匹配所安装的Greenplum数据库系统的主机名和端口。
一些对象(如角色)会在一个Greenplum数据库系统的所有数据库之间共享。 其他对象(例如用户创建的表)则只出现在创建它们的数据库中。
克隆一个数据库
默认情况下,一个新数据库通过克隆标准系统数据库模板template1而创建。 其实在创建新数据库时,任何一个数据库都可以被用作模板,这样就提供了“克隆”或者复制一个现有数据库及其所包含的所有对象和数据的能力。例如:
=> CREATE DATABASE new_dbname TEMPLATE old_dbname;
创建一个不同Owner的数据库
在创建数据库时可以指定另一个数据库Owner:
=> CREATE DATABASE new_dbname WITH owner=new_user;
查看数据库的列表
如果用户在使用psql客户端程序,用户可以使用 \l元命令来显示用户的Greenplum数据库系统中的数据库和模板的列表。 如果使用的是另一种客户端程序并且用户是超级用户,用户可以从 pg_database系统目录表查询数据库的列表。例如:
=> SELECT datname from pg_database;
修改一个数据库
ALTER DATABASE命令可以修改数据库的属性,例如拥有者、名称或者默认配置属性。 例如,下面的命令会修改一个数据库的默认方案搜索路径( search_path配置参数):
=> ALTER DATABASE mydatabase SET search_path TO myschema, public, pg_catalog;
要修改一个数据库,用户必须是该数据库的拥有者或者超级用户。
删除一个数据库
DROP DATABASE命令删除一个数据库。 它会移除该数据库的系统目录项并且删除该数据库在磁盘上的目录及其中包含的数据。 要删除一个数据库,用户必须是该数据库的拥有者或者超级用户,并且当用户或者其他人正连接到该数据库时不能删除它。 在删除一个数据库时,可以连接到postgres(或者另一个数据库)。例如:
=> \c postgres => DROP DATABASE mydatabase;
用户也可以使用客户端程序dropdb来删除一个数据库。 例如,下面的命令会用给出的主机名和端口连接到Greenplum数据库并且删除数据库mydatabase:
$ dropdb -h masterhost -p 5432 mydatabase
DROP DATABASE命令不是事务性的。