检验你是否能够成功访问数据库服务器的第一步,是尝试创建一个新的数据库。一个正常运行的 PostgreSQL 服务实例可以同时管理多个独立的数据库。通常情况下,每个业务项目或每位开发人员都会使用独立的数据库。
系统管理员可能已经为你预先创建好了专供你使用的数据库。如果是这样,你可以跳过这一步,直接进入下一节。
要在命令行中创建一个新数据库(在本示例中命名为 mydb),可以使用以下命令:
$createdb mydb
如果终端没有任何错误回显,说明创建成功,你可以直接跳过本节剩余的排错说明。
如果你看到类似以下的提示信息:
createdb: command not found
说明 PostgreSQL 未正确安装,或者你的 Shell 环境变量 PATH 中未包含其执行路径。可以尝试使用绝对路径调用该命令:
$/usr/local/pgsql/bin/createdb mydb
你机器上的实际安装路径可能有所不同。请咨询系统管理员或核对安装文档以纠正路径配置。
另一种常见的错误提示如下:
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
这表明数据库服务器尚未启动,或者没有在 createdb 预期的套接字地址上监听连接。请核对启动指引或联系管理员确认服务状态。
还可能会遇到以下提示:
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "joe" does not exist
其中提到了你当前的操作系统用户名。这通常是因为管理员尚未在数据库中为你创建对应的 PostgreSQL 用户角色(PostgreSQL 的数据库用户账户与操作系统的系统用户账户相互独立)。如果你自己就是管理员,请参阅 Chapter 21 了解如何创建用户角色。首次创建用户时,你需要切换到安装 PostgreSQL 所用的操作系统用户(通常为 postgres)。也可能是管理员为你分配了与系统用户名不同的数据库用户名;这种情况下,你需要使用 -U 参数或设置环境变量 PGUSER 来显式指定数据库用户名。
如果你的用户账户已存在,但缺乏建库权限,你将看到以下提示:
createdb: error: database creation failed: ERROR: permission denied to create database
并非每个用户都默认拥有创建新数据库的特权。如果 PostgreSQL 拒绝为你创建数据库,需要由管理员为你授予建库权限。如果你是自行安装的数据库实例,在进行本教程练习时,建议直接登录到最初启动服务器的那个系统账户下执行操作。 [1]
你也可以创建其他自定义名称的数据库。PostgreSQL 允许在单个集群中创建任意数量的数据库。数据库名称必须以字母开头,且长度限制在 63 字节以内。一个便捷的习惯是创建一个与当前用户名同名的数据库,许多客户端工具默认会尝试连接同名数据库,这可以为你省去很多输入步骤。只需执行:
$createdb
当你不再需要某个数据库时,可以将其删除。例如,如果你是数据库 mydb 的所有者(创建者),可以通过以下命令将其销毁:
$dropdb mydb
(对于该销毁命令,数据库名不会自动默认套用用户名,必须显式指明)。该操作会从磁盘上彻底物理删除与该数据库关联的所有数据文件,且无法撤销恢复,因此在执行前务必慎重考虑。
关于 createdb 与 dropdb 的更多详细参数与使用选项,可分别参阅 createdb 与 dropdb。
[1]
其背后的运行原理解释如下:PostgreSQL 用户名与操作系统用户是解耦的。连接数据库时,你可以自由选择以哪个数据库用户名登录;如果不显式指定,默认采用当前操作系统的登录用户名。在安装初始化时,系统总是会自动创建一个与启动服务器的操作系统用户同名的超级用户角色,该用户默认拥有建库等全部管理特权。除了切换到该系统账户操作外,你也可以在所有命令中通过指定 -U 选项来选择连接身份。