
3.4 数据库的创建、修改和删除
一个数据库是一个或多个模式的集合,而模式包含表、函数等。因此,完整的逻辑组织结构层次是服务器实例(PostgreSQL Server)、数据库(Database)、模式(Schema)、表(Table),以及某些其他对象(如函数)。一个PostgreSQL服务器实例可以管理多个数据库。当应用程序连接到一个数据库时,一般只能访问该数据库中的数据。
3.4.1 实例4:创建数据库
创建数据库的语法格式如下:

参数说明如下所述。
● name:要创建的数据库的名称。
● user_name:要创建的数据库所属的用户。如果没有指定,则默认属于执行该命令的用户。
● template:要创建的数据库所用的模板库,默认的模板库是template1。
● encoding:要创建的数据库所使用的字符集。如果没有指定,则默认使用其模板库的字符集。
● lc_collate:要创建的数据库所使用的collation顺序。这会影响在ORDER BY语法中字符串类型列的顺序,也会影响text类型列的索引顺序。如果没有指定,则默认使用其模板库的collation顺序。
● lc_ctype:要创建的数据库所使用的字符分类。这会影响字符的分类,如大小写和数字。如果没有指定,则默认使用其模板库的字符分类。
● tablespace_name:要创建的数据库所关联的表空间。默认使用模板库对应的表空间。
● allowconn:是否可以连接该数据库,默认设置为true。如果设置为false,则任何用户都不能连接该数据库。
● connlimit:允许并发连接该数据库的个数。默认设置为-1,即没有限制。
● istemplate:是否是模板库,默认设置为false。如果设置为true,则任何具有创建数据库权限的用户均可以用其复制新的数据库;如果设置为false,则只有超级用户和该数据库的用户可以用其复制新的数据库。
提示:
为了方便用户使用,PostgreSQL将CREATE DATABASE封装成一个程序,命名为createdb。
【举例】创建数据库,命名为db_test,代码如下:

【举例】创建数据库,命名为db_test01,所属用户为hr01,关联的表空间为tbs_test01。其中,用户hr01和表空间tbs_test01都是事先创建好的,代码如下:

3.4.2 实例5:修改数据库
修改数据库的语法格式如下:

option包含的选项如下所述。
● ALLOW_CONNECTIONS allowconn
● CONNECTION LIMIT connlimit
● IS_TEMPLATE istemplate
● ALTER DATABASE name RENAME TO new_name
● ALTER DATABASE name OWNER TO{new_owner|CURRENT_USER|SESSION_USER}
● ALTER DATABASE name SET TABLESPACE new_tablespace
● ALTER DATABASE name SET configuration_parameter{TO|=}{value|DEFAULT}
● ALTER DATABASE name SET configuration_parameter FROM CURRENT
● ALTER DATABASE name RESET configuration_parameter
● ALTER DATABASE name RESET ALL
上述语法中的参数可参考3.4.1节中CREATE DATABASE语法的参数说明。这里重点说一下configuration_parameter参数。configuration_parameter用于设置连接到该数据库的所有session的参数配置值。
【举例】将数据库db_test的名称改为“db_test03”,代码如下:

【举例】将数据库db_test01中的最大连接数改为“100”,代码如下:

【举例】将数据库db_test01的索引扫描关闭,当用户连接到该数据库时就将enable_indexscan设置为off,代码如下:

3.4.3 实例6:删除数据库
删除数据库的语法格式如下:

其中,加上“IF EXISTS”可选关键字,则在删除数据库时,如果该数据库不存在,不会报错,只会打印NOTICE信息。
【举例】删除一个已经存在的数据库db_test01,代码如下:
