2024年9月26日:PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不受支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2

1.3. 创建数据库 #

第一个测试,以查看您是否可以访问数据库服务器,就是尝试创建一个数据库。一个正在运行的 PostgreSQL 服务器可以管理多个数据库。通常,每个项目或每个用户使用一个单独的数据库。

可能,您的站点管理员已经为您创建了一个数据库。在这种情况下,您可以省略此步骤并跳到下一节。

要创建一个新的数据库,在本例中名为 mydb,您可以使用以下命令

$ createdb mydb

如果这没有产生任何响应,则此步骤已成功,您可以跳过本节的其余部分。

如果您看到类似以下的消息

createdb: command not found

PostgreSQL 未正确安装。它要么根本没有安装,要么您的 shell 的搜索路径未设置为包含它。尝试使用绝对路径调用该命令

$ /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 用户帐户与操作系统用户帐户不同。)如果您是管理员,请参阅 第21章 以获取有关创建帐户的帮助。您需要成为安装 PostgreSQL 的操作系统用户(通常为 postgres)才能创建第一个用户帐户。也可能是您被分配了一个与您的操作系统用户名不同的 PostgreSQL 用户名;在这种情况下,您需要使用 -U 开关或设置 PGUSER 环境变量来指定您的 PostgreSQL 用户名。

如果您有用户帐户但它没有创建数据库所需的权限,您将看到以下内容

createdb: error: database creation failed: ERROR:  permission denied to create database

并非每个用户都有权创建新数据库。如果 PostgreSQL 拒绝为您创建数据库,则站点管理员需要授予您创建数据库的权限。如果发生这种情况,请咨询您的站点管理员。如果您自己安装了 PostgreSQL,则应以您启动服务器时使用的用户帐户的身份登录以进行本教程。[1]

您还可以创建其他名称的数据库。PostgreSQL 允许您在给定站点创建任意数量的数据库。数据库名称必须以字母开头,长度限制为 63 个字节。一个方便的选择是使用与您当前用户名相同的名称创建数据库。许多工具将该数据库名称作为默认值,因此可以节省一些输入。要创建该数据库,只需键入

$ createdb

如果您不再希望使用您的数据库,您可以将其删除。例如,如果您是数据库 mydb 的所有者(创建者),您可以使用以下命令将其销毁

$ dropdb mydb

(对于此命令,数据库名称不会默认为用户帐户名。您始终需要指定它。)此操作会物理删除与数据库关联的所有文件,并且无法撤消,因此仅应在经过深思熟虑后执行此操作。

有关 createdbdropdb 的更多信息,请分别参阅 createdbdropdb



[1] 作为对此工作原理的解释:PostgreSQL 用户名与操作系统用户帐户是分开的。当您连接到数据库时,可以选择以哪个 PostgreSQL 用户名连接;如果不选择,它将默认为与您当前操作系统帐户相同的名称。碰巧的是,始终存在一个与启动服务器的操作系统用户具有相同名称的 PostgreSQL 用户帐户,并且碰巧该用户始终具有创建数据库的权限。您可以不以该用户身份登录,也可以在所有位置指定 -U 选项以选择要连接到的 PostgreSQL 用户名。

提交更正

如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表单 报告文档问题。