数据库
前言
一个PostgreSQL数据库服务可以管理多个数据库,当应用连接到一个数据库时,一般只能访问这个数据库中的数据,而不能访问其他数据库中的内容(除非是用类似DBLink等方法)。
在Postgres中,一个数据库服务(或叫实例)下可以有多个数据库,但一个数据库不能属于多个实例。
在Oracle中,一个实例只能有一个数据库,但一个数据库可以在多个实例中(如RAC)。
创建数据库
基本语法
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ] -- 所属用户,默认当前用户
[ TEMPLATE [=] template ] -- 指定模板,默认template1
[ ENCODING [=] encoding ] -- 指定字符集,可使用UTF8
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace ] -- 指定表空间
[ CONNECTION LIMIT [=] connlimit ] ] -- 可接收连接数,默认-1,表示无限制
示例
-- 为当前用户创建名为dbtest的数据库
CREATE DATABASE dbtest;
-- 为zhangsan用户创建名为dbtest2的数据库
CREATE DATABASE dbtest OWNER = zhangsan;
-- 创建数据库gorm
CREATE DATABASE gorm
WITH
OWNER = hayden
TEMPLATE = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.UTF-8'
LC_CTYPE = 'en_US.UTF-8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1
IS_TEMPLATE = False;
如果字符集不为utf8,比如使用LATIN1
编码创建数据库时,应该指定template
为template0
,而不是默认的template1
。因为编码和区域设置必须与模板数据库的编码和区域相匹配,而template0
是不包含任何会受字符集或排序影响的数据或索引。
修改数据库
基础语法
ALTER DATABASE name [[with]] option [ ... ]
示例
-- 最大连接数限制为10
ALTER DATABASE dbtest CONNECTION LIMIT 10;
-- 修改数据库名
ALTER DATABASE name RENAME TO new_name;
-- 修改数据库的所有者
ALTER DATABASE name OWNER TO new_owner;
-- 修改数据库的表空间
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;
删除数据库
只有数据库的拥有者或超级用户才可以删除数据库。删除数据库会 移除其中包括的所有对象。
基本语法
DROP DATABASE [ IF EXISTS ] name
注意:如果有用户在连接,则不能删除数据库。
查看数据库
select datname from pg_database;
管理数据库模板
创建数据库,实际上是通过复制一个已有数据库进行的。在默认情况下,将复制template1
的标准系统数据库。系统中还有一个template0
数据库,这是个更纯净的数据库,不包含任何附加物。
查看当前已存在的数据库信息。其中datistemplate
表示是否为数据库模板,datallowconn
表示是否允许与该数据库建立任何新的连接。
select iod,datname,datistemplate, datallowconn from pg_database;