ITPub博客

首页 > 数据库 > PostgreSQL > PostgreSQL:数据库的创建与删除

PostgreSQL:数据库的创建与删除

原创 PostgreSQL 作者:Ryan_Bai 时间:2020-11-30 14:49:07 0 删除 编辑

创建数据库

CREATE DATABASE

  1. 语法
    PostgreSQL中可以使用\h+command的方式来获取对应的提示,例子如下:

    postgres@postgres=>\h create database
    Command:     CREATE DATABASE
    Description: create a new database
    Syntax:
    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 ] ]
    URL: https://www.postgresql.org/docs/12/sql-createdatabase.html
  2. 查看当前已存在的数据库

    postgres@postgres=>\l
                                 List of databases
       Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
    -----------+----------+----------+---------+-------+-----------------------
     postgres  | postgres | LATIN1   | en_US   | en_US | 
     template0 | postgres | LATIN1   | en_US   | en_US | =c/postgres          +
               |          |          |         |       | postgres=CTc/postgres
     template1 | postgres | LATIN1   | en_US   | en_US | =c/postgres          +
               |          |          |         |       | postgres=CTc/postgres
    (3 rows)
  3. 示例

    • 创建新数据库

      CREATE DATABASE test;
    • 创建一个数据库 dbtest,拥有者是 utest,表空间是 tbstest

      CREATE DATABASE dbtest OWNER utest TABLESPACE tbstest;
    • 创建一个不同字符集的数据库
      在本例中,如果指定的区域设置与 template1 中的区域设置不同,则需要 TEMPLATE template0 子句。(如果不是,那么显式地指定语言环境是多余的。)

      CREATE DATABASE test
          LC_COLLATE 'sv_SE.utf8' LC_CTYPE 'sv_SE.utf8'
          TEMPLATE template0;
    • 创建一个具有不同语言环境和不同字符集编码的数据库
      指定的区域设置和编码设置必须匹配,否则将报告错误。

      CREATE DATABASE test
          LC_COLLATE 'sv_SE.iso885915' LC_CTYPE 'sv_SE.iso885915'
          ENCODING LATIN9
          TEMPLATE template0;

CREATEDB

createdb 是一个 SQL 命令 CREATE DATABASE 的封装。

createdb 命令语法格式如下:

createdb [option...] [dbname [description]]

参数说明:

  • dbname:要创建的数据库名。

  • description:关于新创建的数据库相关的说明。

  • options:参数可选项,可以是以下值:

    • -D tablespace:指定数据库默认表空间。

    • -e:将 createdb 生成的命令发送到服务端。

    • -E encoding:指定数据库的编码。

    • -l locale:指定数据库的语言环境。

    • -T template:指定创建此数据库的模板。

    • --help:显示 createdb 命令的帮助信息。

    • -h host:指定服务器的主机名。

    • -p port:指定服务器监听的端口,或者 socket 文件。

    • -U username:连接数据库的用户名。

    • -w:忽略输入密码。

    • -W:连接时强制要求输入密码。

接下来我们打开一个命令窗口,进入到 PostgreSQL 的安装目录,并进入到 bin 目录,createdb 命令位于 **PostgreSQL安装目录/bin** 下,执行创建数据库的命令:

$ cd /Library/PostgreSQL/11/bin/
$ createdb -h localhost -p 5432 -U postgres runoobdb
password ******

以上命令我们使用了超级用户 postgres 登录到主机地址为 localhost,端口号为 5432 的 PostgreSQL 数据库中并创建 runoobdb 数据库。

删除数据库

DROP DATABASE

  1. 语法

    postgres@postgres=>\h drop database
    Command:     DROP DATABASE
    Description: remove a database
    Syntax:
    DROP DATABASE [ IF EXISTS ] name
    URL: https://www.postgresql.org/docs/12/sql-dropdatabase.html
  2. 例子

    • 正常删除

      postgres=# drop database test1;
      DROP DATABASE
      postgres=# drop database test2;
      DROP DATABASE
    • 无数据库
      通过if exists子句进行判断,数据库不存在命令也不会报错

      postgres=# drop database if exists test3;
      NOTICE:  database "test3" does not exist, skipping
      DROP DATABASE
      postgres=# \l
                                        List of databases
         Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
      -----------+----------+----------+-------------+-------------+-----------------------
       postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
       template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
                 |          |          |             |             | postgres=CTc/postgres
       template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
                 |          |          |             |             | postgres=CTc/postgres
      (3 rows)
    • 如果此时有其他连接正连接在需要删除的数据库上,将无法删除该数据库,报错如下:

      postgres=# drop database test3;
      ERROR:  database "test3" is being accessed by other users
      DETAIL:  There is 1 other session using the database.

dropdb

dropdb 是 DROP DATABASE 的包装器。

dropdb 用于删除 PostgreSQL 数据库。

dropdb 命令只能由超级管理员或数据库拥有者执行。

dropdb 命令语法格式如下:

dropdb [connection-option...] [option...] dbname

参数说明:

  • dbname:要删除的数据库名。

  • options:参数可选项,可以是以下值:

    • -e:显示 dropdb 生成的命令并发送到数据库服务器。

    • -i:在做删除的工作之前发出一个验证提示。

    • -V:打印 dropdb 版本并退出。

    • --if-exists:如果数据库不存在则发出提示信息,而不是错误信息。

    • --help:显示有关 dropdb 命令的帮助信息。

    • -h host:指定运行服务器的主机名。

    • -p port:指定服务器监听的端口,或者 socket 文件。

    • -U username:连接数据库的用户名。

    • -w:连接数据库的用户名。

    • -W:连接时强制要求输入密码。

    • --maintenance-db=dbname:删除数据库时指定连接的数据库,默认为 postgres,如果它不存在则使用 template1。

接下来我们打开一个命令窗口,进入到 PostgreSQL 的安装目录,并进入到 bin 目录,dropdb 名位于 PostgreSQL安装目录/bin 下,执行删除数据库的命令:

$ cd /Library/PostgreSQL/11/bin/
$ dropdb -h localhost -p 5432 -U postgres runoobdb
password ******

以上命令我们使用了超级用户 postgres 登录到主机地址为 localhost,端口号为 5432 的 PostgreSQL 数据库中并删除 runoobdb 数据库。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31490526/viewspace-2738129/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE Associate; OCMU 用户组成员; Oracle 10g OCE、OCA、OCP; Oracle 11g OCP、OCM; MySQL 5.6 OCP; Oracle 11g OCP讲师; PostgreSQL PGCE 获得者;

注册时间:2017-09-18

  • 博文量
    226
  • 访问量
    260725