PostgreSQL:数据库的创建与删除

来源:这里教程网 时间:2026-03-14 20:13:38 作者:

创建数据库

CREATE DATABASE

    语法 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

    查看当前已存在的数据库

    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)

    示例

    创建新数据库

    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

    语法

    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

    例子

    正常删除

    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 数据库。

相关推荐