支持的版本:当前 (17) / 16 / 15 / 14 / 13
开发版本:devel
不支持的版本:12 / 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 用户名。

提交更正

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