一个PostgreSQL数据库服务可以管理多个数据库,除非使用特定的手段,否则在一个数据库中无法访问其他数据库中的内容。
- 创建数据库
--语法
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ]
[ IS_TEMPLATE [=] istemplate ] ]
--最简单的创建数据库的语句,创建成功后执行\l查看
postgres=# create database test1;
CREATE DATABASE
--创建数据库可以执行模板,下例使用template0作为模板数据库。
postgres=# create database test2 template template0;
CREATE DATABASE
--注:一般我们可以使用template1和template0作为模板数据库,不指定默认为template1。
--但是,我们需要重新设置编码和区域设置时,需要指定template0,因为template0不包含任
--何会受字符集编码或排序影响的数据或索引,可以用来作为创建任意字符集数据库的模板。
--下例创建了数据库test3,模板为template0,编码为utf8,表空间为tbs,最大并发连接为100
postgres=# CREATE DATABASE test3 TEMPLATE template0 ENCODING 'UTF-8' TABLESPACE tbs CONNECTION LIMIT 100;
CREATE DATABASE
- 修改数据库
--修改数据库名称
alter database test2 rename to test_1;
--修改最大连接数
postgres=# alter database test_1 connection limit 10 ;
ALTER DATABASE
--修改表空间
postgres=# alter database test_1 set tablespace tbs1;
ALTER DATABASE
--除此之外,还有如下功能
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
- 删除数据库
postgres=# drop database test3;
DROP DATABASE
postgres=# drop database test3;
ERROR: database "test3" does not exist
postgres=# drop database if exists test3;
NOTICE: database "test3" does not exist, skipping
DROP DATABASE
--注:若还有用户连接到该数据库,将导致无法删除该数据库
- 注意事项 1、无法在事务块中创建数据库
postgres=# begin ;
BEGIN
postgres=# create database test1;
ERROR: CREATE DATABASE cannot run inside a transaction block
2、无法在事务块中删除数据库
postgres=# begin;
BEGIN
postgres=# drop database test_1;
ERROR: DROP DATABASE cannot run inside a transaction block
postgres=# end;
ROLLBACK
3、可以在事务块中修改数据库
postgres=# begin;
BEGIN
postgres=# alter database test_1 rename to test;
ALTER DATABASE
postgres=# commit;
COMMIT