受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

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用户帐号与操作系统用户帐号是分开的。) 如果你是管理员,请参阅Chapter 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用户名。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。