Postgresql psql 操作
Postgresql 选择数据库 

Postgresql 创建数据库


在 PostgreSQL 中创建数据库可以通过多种方式进行,包括命令行工具、SQL 命令和图形用户界面工具。本文和以后的教程都以命令行工具 psql 工具来说明 SQL 相关操作。


创建数据库

使用CREATE DATABASE 来创建一个新数据库。

语法格式:

CREATE DATABASE name
    [ WITH ] [ OWNER [=] user_name ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ STRATEGY [=] strategy ]
           [ LOCALE [=] locale ]
           [ LC_COLLATE [=] lc_collate ]
           [ LC_CTYPE [=] lc_ctype ]
           [ ICU_LOCALE [=] icu_locale ]
           [ ICU_RULES [=] icu_rules ]
           [ LOCALE_PROVIDER [=] locale_provider ]
           [ COLLATION_VERSION = collation_version ]
           [ TABLESPACE [=] tablespace_name ]
           [ ALLOW_CONNECTIONS [=] allowconn ]
           [ CONNECTION LIMIT [=] connlimit ]
           [ IS_TEMPLATE [=] istemplate ]
           [ OID [=] oid ]

参数说明:

  • name -- 要创建的数据库的名称。

  • user_name -- 将拥有新数据库的用户的角色名称,或者 DEFAULT 以使用默认值(即执行命令的用户)。要创建由其他角色拥有的数据库,您必须能够将 SET ROLE 设置为该角色。

  • template -- 从中创建新数据库的模板的名称,或者 DEFAULT 以使用默认模板 (template1)。

  • encoding -- 要在新数据库中使用的字符集编码。指定字符串常量(例如,'SQL_ASCII')或整数编码数字,或指定 DEFAULT 以使用默认编码(即模板数据库的编码)。

  • strategy -- 创建新数据库时使用的策略。如果使用 WAL_LOG 策略,数据库将被逐块复制,每个块将被单独写入预写日志。在模板数据库较小的情况下,这是最有效的策略,因此它是默认策略。较旧的 FILE_COPY 策略也可用。此策略将一条小记录写入目标数据库使用的每个表空间的预写日志。每个这样的记录都表示将整个目录复制到文件系统级别的新位置。虽然这确实大大减少了预写日志量,尤其是在模板数据库很大的情况下,但它也会强制系统在创建新数据库之前和之后执行检查点。在某些情况下,这可能会对整体系统性能产生明显的负面影响。

  • locale -- 在新数据库中设置默认排序顺序和字符分类。排序规则会影响应用于字符串的排序顺序,例如,在使用 ORDER BY 的查询中,以及文本列的索引中使用的 Sequences。字符分类会影响字符的分类,例如,小写、大写和数字。此外,还可以设置操作系统环境的关联方面 LC_COLLATE 和 LC_CTYPE。默认值与模板数据库的设置相同。

  • lc_collate -- 在数据库服务器的操作系统环境中设置 LC_COLLATE。默认值为 locale 的设置(如果指定),否则与模板数据库的设置相同。有关其他限制,请参阅下文。如果 locale_provider 是 libc,则还要设置要在新数据库中使用的默认排序规则 Sequences,并覆盖设置 locale。

  • lc_ctype -- 在数据库服务器的操作系统环境中设置 LC_CTYPE。默认值为 locale 的设置(如果指定),否则与模板数据库的设置相同。有关其他限制,请参阅下文。如果 locale_provider 为 libc,则还要设置要在新数据库中使用的默认字符分类,覆盖设置 locale。

  • icu_locale -- 为数据库默认排序规则顺序和字符分类指定 ICU 区域设置,覆盖设置区域设置。区域设置提供程序必须是 ICU。如果指定了 locale,则默认值为 locale 的设置;否则,与 Template Database 的设置相同。

  • icu_rules 指定其他排序规则以自定义此数据库的默认排序规则的行为。仅 ICU 支持此功能。

  • locale_provider -- 指定要用于此数据库中的默认排序规则的提供程序。可能的值为 icu (如果服务器是使用 ICU 支持构建的)或 libc 。默认情况下,提供程序与模板的提供程序相同。

  • collation_version -- 指定要与数据库一起存储的排序规则版本字符串。通常,应省略此项,这将导致根据操作系统提供的数据库排序规则的实际版本计算版本。此选项旨在供 pg_upgrade 用于从现有安装中复制版本。

  • tablespace_name -- 将与新数据库关联的表空间的名称,或 DEFAULT 以使用模板数据库的表空间。此表空间将是用于此数据库中创建的对象的默认表空间。

  • allowconn -- 如果为 false,则没有人可以连接到此数据库。默认值为 true,允许连接(除非受其他机制限制,例如 GRANT/REVOKE CONNECT)。

  • connlimit -- 可以对此数据库建立多少个并发连接。-1 (默认值) 表示无限制。

  • istemplate -- 如果为 true,则具有 CREATEDB 权限的任何用户都可以克隆此数据库;如果为 false(默认值),则只有超级用户或数据库的所有者才能克隆它。

  • oid -- 要用于新数据库的对象标识符。如果未指定此参数,PostgreSQL 将自动选择合适的 OID。此参数主要供 pg_upgrade 内部使用,只有 pg_upgrade 可以指定小于 16384 的值。


使用示例

创建一个名为 new_database 的数据库:

CREATE DATABASE new_database;

创建一个名为 new_database 的数据库,且由用户 my_user 拥有,可使用以下命令:

CREATE DATABASE new_database WITH OWNER my_user;

创建一个名为 new_database 的数据库,并且指定编码为 UTF8:

CREATE DATABASE new_database  WITH ENCODING 'UTF8';

创建一个名为 new_database 的数据库,由用户 my_user 拥有,默认表空间为 myspace:

CREATE DATABASE new_database with OWNER my_user TABLESPACE myspace;