跳转至

PostgreSQL 数据库管理

在PostgreSQL中,数据库管理的最基本操作就是创建、使用和删除数据库。对应的创建和删除数据库可以使用三种方式实现:

  1. 使用 SQL 语句创建或删除
  2. 使用 createdb/dropdb 命令实现
  3. 使用 pgAdmin/DBeaver/HeidiSQL 等图形化管理工具实现

SQL语句实现

在PostgreSQL中,创建、使用和删除数据库都可以通过SQL命令来完成。以下是这些操作的基本指令:

创建数据库

使用CREATE DATABASE命令来创建一个新的数据库:

1
CREATE DATABASE database_name;
其中database_name是你想要创建的数据库的名称。

使用数据库

使用\c\connect命令来切换到特定的数据库:

1
\c database_name
或者
1
\connect database_name
这将改变当前会话到指定的database_name数据库。

删除数据库

使用DROP DATABASE命令来删除一个数据库:

1
DROP DATABASE database_name;
这将删除database_name数据库。请注意,这个操作是不可逆的,一旦执行,数据库及其所有内容将被永久删除。

在执行这些命令之前,请确保你有足够的权限来创建、使用或删除数据库。通常,你需要以具有相应权限的用户身份登录到PostgreSQL服务器。如果你是使用psql命令行工具,你可以使用-U username参数来指定用户,例如:

1
psql -U username -d database_name

在执行删除数据库操作时请格外小心,因为这将永久删除数据库及其所有内容。在执行这些操作之前,确保你已经备份了所有重要的数据。

以下是整体执行示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@361way ~]# su - postgres
[postgres@361way ~]$ psql
psql (13.16)
Type "help" for help.

# 数据库名称只有是字母开头,比如使用数字开头时会报错
postgres=# CREATE DATABASE 361way;
ERROR:  syntax error at or near "361"
LINE 1: CREATE DATABASE 361way;
                        ^
postgres=# CREATE DATABASE way361;
CREATE DATABASE
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | test=CTc/postgres
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | test=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | test=CTc/postgres
 way361    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
(4 rows)

postgres=# \c way361
You are now connected to database "way361" as user "postgres".

# 删除数据库时,不能停在当前数据库里
way361=# DROP DATABASE way361;
ERROR:  cannot drop the currently open database
way361=# \c postgres
You are now connected to database "postgres" as user "postgres".
postgres=# DROP DATABASE way361;
DROP DATABASE
postgres=#

如果不确认数据库是否存在,也可以使用 DROP DATABASE [ IF EXISTS ] name 执行,如果对应的数据库不存在会发出提示信息,而不是错误信息。

命令实现

createdb/dropdb 命令在 postgresql 包中,不在 postgresql-server 包中。通过这两个命令可以实现数据库的创建和删除。

创建数据库

默认yum源安装的情况下,因为没有配置认证鉴权,可以直接通过 createdb database_name 创建数据库:

1
2
3
4
[postgres@361way ~]$ createdb way361
# 如果开启了认证鉴权的可以通过如下命令创建
[postgres@361way ~]$ createdb -h localhost -p 5432 -U postgres way361
password ******

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

序号 选项 & 描述
1 -D tablespace 指定数据库默认表空间。
2 -e 将 createdb 生成的命令发送到服务端。
3 -E encoding 指定数据库的编码。
4 -l locale 指定数据库的语言环境。
5 -T template 指定创建此数据库的模板。
6 --help 显示 createdb 命令的帮助信息。
7 -h host 指定服务器的主机名。
8 -p port 指定服务器监听的端口,或者 socket 文件。
9 -U username 连接数据库的用户名。
10 -w 忽略输入密码。
11 -W 连接时强制要求输入密码。

删除数据库

删除操作类似创建操作,对应的命令如下:

1
2
3
[postgres@361way ~]$ dropdb way361
[postgres@361way ~]$ dropdb -h localhost -p 5432 -U postgres way361
password ******

开启了认证鉴权的情况下,后面使用的对应的参数如下:

序号 选项 & 描述
1 -e 显示 dropdb 生成的命令并发送到数据库服务器。
2 -i 在做删除的工作之前发出一个验证提示。
3 -V 打印 dropdb 版本并退出。
4 --if-exists 如果数据库不存在则发出提示信息,而不是错误信息。
5 --help 显示有关 dropdb 命令的帮助信息。
6 -h host 指定运行服务器的主机名。
7 -p port 指定服务器监听的端口,或者 socket 文件。
8 -U username 连接数据库的用户名。
9 -w 连接时忽略输入密码。
10 -W 连接时强制要求输入密码。
11 --maintenance-db=dbname 删除数据库时指定连接的数据库,默认为 postgres,如果它不存在则使用 template1。

图形化管理

使用 pgAdmin/DBeaver/HeidiSQL 等图形化管理工具都可以实现数据库的全生命周期管理,这里以 pgadmin 为例,对应的操作界面如下:

pgadmin-create-database

默认字符集

在 PostgreSQL 中,创建数据库时可以指定编码类型(字符集)。默认情况下,PostgreSQL 使用 UTF8 编码,但如果你想要指定一个不同的编码,可以使用 LC_COLLATELC_CTYPE 参数来设置数据库的排序规则(collation)和字符类型(character type)。

以下是创建一个指定编码类型的数据库的示例:

1
2
3
4
5
CREATE DATABASE database_name
    WITH 
    ENCODING = 'UTF8' -- 或者 'LATIN1', 'SQL_ASCII' 等
    LC_COLLATE = 'C'    -- 指定排序规则,'C' 表示使用系统的默认排序规则
    LC_CTYPE = 'C';     -- 指定字符类型,'C' 表示使用系统的默认字符类型

一旦数据库被创建,其编码类型就不能再被更改。如果你需要使用不同的编码类型,必须创建一个新的数据库。在实际操作中,通常使用默认的 UTF8 编码就足够了,因为它支持多语言字符,并且与多种应用程序兼容。如果你有特定的需求,需要使用其他编码类型,确保了解该编码类型的特性和限制。

捐赠本站(Donate)

weixin_pay
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))