1.3. 创建一个数据库
看看你能否访问数据库服务器的第一个例子就是试着创建一个数据库。一台运行着 的PostgreSQL服务器可以管理许多数据库。通常我们 会为每个项目和每个用户单独使用一个数据库。
节点管理员可能已经为你创建了可以使用的数据库。他应该已经告诉你这个数据库的 名字。如果这样你就可以省略这一步,并且跳到下一节。
要创建一个新的数据库,在我们这个例子里叫mydb
,你可以使用下面的命令:
<samp class="literal">$</samp> <kbd class="literal">createdb mydb</kbd>
如果不报错那么这一步就成功了,你就可以忽略本节余下的部分了。
如果你看到类似下面这样的信息:
createdb: command not found
那么就是PostgreSQL没有安装好:要么是就根本没装上、要么是搜索路径没有包含它。 尝试用绝对路径调用该命令试试:
<samp class="literal">$</samp> <kbd class="literal">/usr/local/pgsql/bin/createdb mydb</kbd>
在你的节点上这个路径可能不一样。请和管理员联系或者看看安装指导以获取正确的位置。
另外一种响应可能是这样:
createdb: could not connect to database postgres: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
这意味着服务器没有启动,或者没有在createdb
预期的地方启动。同样, 你也要检查安装指导或者找管理员。
另外一个响应可能是这样:
createdb: could not connect to database postgres: FATAL: role "joe" does not exist
在这里提到了你自己的登陆名。如果管理员没有为你创建PostgreSQL 用户帐号,就会发生这些现像。PostgreSQL用户帐号和操作系统用户帐 号是不同的。如果你就是管理员,参阅Chapter 20以获取创建用户帐号 的帮助。你需要变成安装PostgreSQL的操作系统用户的身份(通常 是postgres
)才能创建第一个用户帐号。也有可能是赋予PostgreSQL 用户名和操作系统用户名不同;这种情况下,你需要使用-U
开关或者使用 PGUSER
环境变量声明PostgreSQL用户名。
如果你有个数据库用户帐号,但是没有创建数据库所需要的权限,那么你会看到下面的东西:
createdb: database creation failed: ERROR: permission denied to create database
并非所有用户都经过了创建新数据库的授权。如果PostgreSQL 拒绝为你创建数据库,那么你需要让节点管理员赋予你创建数据库的权限。出现这种情况时 请咨询你的节点管理员。如果你自己安装了PostgreSQL,那么 你应该以你启动数据库服务器的用户身份登陆然后参考手册完成权限的赋予工作。 [1]
你还可以用其它名字创建数据库。PostgreSQL允许你在 一个节点上创建任意数量的数据库。数据库名必须是以字母开头并且小于 63 个字节 长。一个方便的做法是创建和你当前用户名同名的数据库。许多工具假设它为缺省的 数据库名,所以这样可以节省敲键。要创建这样的数据库,只需要键入:
<samp class="literal">$</samp> <kbd class="literal">createdb</kbd>
如果你再也不想使用你的数据库了,那么你可以删除它。比如,如果你是数据库 mydb
的属主(创建人),那么你就可以用下面的命令删除它:
<samp class="literal">$</samp> <kbd class="literal">dropdb mydb</kbd>
对于这条命令而言,数据库名不是缺省的用户名,你必须明确声明它。这个动作物理 上将所有与该数据库相关的文件都删除并且不可恢复,因此做这件事之前一定要想清楚。
更多关于createdb
和dropdb
的信息可以在 createdb和dropdb小节找到。
Notes
[1] 为什么这么干就行了? 解释如下:PostgreSQL用户名 是和操作系统用户账号分开的。如果你与一个数据库连接,你可以指定以哪个 PostgreSQL用户名进行连接;如果你不指定,那么缺省 就是你当前的操作系统账号。如果这样,那么总有一个与操作系统用户同名的 PostgreSQL用户账号用于启动服务器,并且通常这个用 户都有创建数据库的权限。如果你不想以该用户身份登陆,那么你也可以在任何地方 声明一个-U
选项来选择一个连接时使用的PostgreSQL用户名。