PostgreSql 数据库操作

一、创建数据库

1.1 语法

CREATE DATABASE name
    [ [ WITH ] [ OWNER [=] user_name ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ LOCALE [=] locale ]
           [ LC_COLLATE [=] lc_collate ]
           [ LC_CTYPE [=] lc_ctype ]
           [ TABLESPACE [=] tablespace_name ]
           [ ALLOW_CONNECTIONS [=] allowconn ]
           [ CONNECTION LIMIT [=] connlimit ] 
           [ IS_TEMPLATE [=] istemplate ] ]

  要创建一个数据库,你必须是一个超级用户或者具有特殊的 CREATEDB 特权。默认情况下,新数据库将以标准系统数据库 template1 为模板进行创建。可以通过写 TEMPLATE name 指定一个不同的模板。特别地,通过写 TEMPLATE template0 可以创建一个原始的数据库(其中没有用户定义的对象存在并且系统对象没有被更改),它将只包含你的 PostgreSQL 版本所预定义的标准对象。

可选的参数可以被写成任何顺序,不用按照上面说明的顺序,参数说明如下:

name:要创建的数据库名。
user_name:将拥有新数据库的用户的角色名,或者用 DEFAULT 来使用默认值(即执行该命令的用户)。
template:要从其创建新数据库的模板名称,或者用DEFAULT来使用默认模板(template1)。
encoding:要在新数据库中使用的字符集编码。指定一个字符串常量(例如’SQL_ASCII’),或者一个整数编码编号,或者 DEFAULT 来使用默认的编码(即模板数据库的编码)。
locale:这是一个同时设置 LC_COLLATE和LC_CTYPE 的快捷方式。如果指定此参数,您不能指定这些参数中的任何一个。
lc_collate:要在新数据库中使用的排序规则顺序(LC_COLLATE)。这会影响应用到字符串的排序顺序,例如在带 ORDER BY 的查询中,以及文本列上索引所使用的顺序。默认是使用模板数据库的排序规则顺序。
lc_ctype:要在新数据库中使用的字符分类(LC_CTYPE)。这会影响字符的类别,如小写、大写和数字。默认是使用模板数据库的字符分类。
tablespace_name:将与新数据库相关联的表空间名称,或者 DEFAULT 来使用模板数据库的表空间。这个表空间将是在这个数据库中创建的对象的表空间。
allowconn:如果为假,则没有人能连接到这个数据库。默认为真,表示允许连接(除了被其他机制约束以外,例如 GRANT/REVOKE CONNECT)。
connlimit:这个数据库允许多少并发连接。-1 (默认值)表示没有限制。
istemplate:如果为真,则任何具有 CREATEDB 特权的用户都可以从这个数据库克隆。如果为假(默认),则只有超级用户或者该数据库的拥有者可以克隆它。

1.2 示例

--创建一个新的数据库
CREATE DATABASE lusiadas;

--在一个默认表空间 salesspace 中创建一个被用户 salesapp 拥有的新数据库sales 
CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

--用不同的语言环境创建数据库 music
CREATE DATABASE music LOCALE 'sv_SE.utf8' TEMPLATE template0;

--不同的语言环境和不同的字符集编码创建数据库 music2
CREATE DATABASE music2 LOCALE 'sv_SE.iso885915' ENCODING LATIN9 TEMPLATE template0;
  • 指定的区域设置和编码设置必须匹配,否则会报告错误。
  • 区域名称是特定于操作系统的,因此上述命令可能无法在任何地方以相同的方式工作。

二、修改数据库

2.1 语法

ALTER DATABASE name [ [ WITH ] option [ ... ] ]

这里 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

参数说明如下:

name:要被修改属性的数据库名称。
allowconn:如果为假,则没有人能连接到这个数据库。
connlimit:与这个数据库可以建立多少个并发连接。-1 表示没有限制。
istemplate:如果为真,则任何具有 CREATEDB 特权的用户都可以从这个数据库进行克隆。如果为假,则只有超级用户或者这个数据库的拥有者可以克隆它。
new_name:数据库的新名称。
new_owner:数据库的新拥有者。
new_tablespace:数据库的新默认表空间。这种形式的命令不能在事务块内执行。
configuration_parameter value:将这个数据库的指定配置参数的会话默认值设置为给定值。如果 value 是 DEFAULT,或者等效地使用了 RESET,数据库相关的设置会被移除,因此系统范围的默认设置将会在新会话中继承。使用 RESET ALL 可清除所有数据库相关的设置。SET FROM CURRENT 会保存该会话的当前参数值作为数据库相关的值。

2.2 示例

--数据库 test 中默认禁用索引扫描
ALTER DATABASE test SET enable_indexscan TO off;

--数据库 test 的最大连接数修改为 10
ALTER DATABASE test CONNECTION LIMIT 10;

三、删除数据库

3.1 语法

DROP DATABASE [ IF EXISTS ] name [ [ WITH ] ( option [, ...] ) ]

3.1 示例

--删除数据库test
DROP DATABASE test;

猜你喜欢

转载自blog.csdn.net/songyundong1993/article/details/131561392
今日推荐