PostgreSQL7.0手册-教程 -71. 开始
内容
设置你的运行环境
运行SQL界面(psql)
管理数据库
新的 Postgres 用户如何开始工作的内容.
某些使用 Postgres 所需要的步骤可以由任何 Postgres 用户执行, 而另外一些步骤就必须由节点数据库管理员执行.这个数据库管理员就是安装该软件,创建数据库目录并启动postmaster 进程的人.这个人不必是 UNIX 超级用户(“root”)或计算机系统管理员;一个人可以在没有任何特殊帐号或权限的情况下安装和使用Postgres.
如果你自己安装 Postgres ,请参阅管理员手册中的安装指导,安装完成后再回到本手册.
在这本手册里,任何以字符“%”开头的例子都应该在 UNIX shell 命令行上输入的命令.任何以字符 “*”开头的例子都是 Postgres 查询语言-Postgres SQL 的例子.
设置你的运行环境
本节讨论如何设置你的运行环境,以便运行你的前端应用.我们假设你已经成功安装并运行了Postgres;关于如何安装 Postgres 请参阅管理员手册.
Postgres 是一个client/server 应用软件.作为用户,你只需要访问安装后的客户端部分(一个客户端应用的例子就是 SQL 界面 psql).为了简单起见,我们假设 Postgres 装在 /usr/local/pgsql目录下.因此,当你看到 /usr/local/pgsql 目录时,你应该把它替换成 Postgres 安装的实际目录. 所有 Postgres 命令都装在 /usr/local/pgsql/bin 目录下.因此,你应该把这个目录加入你的 shell 命令路径(PATH)里.如果你使用csh或tcsh,你应该加入下面一行:
% set path = ( /usr/local/pgsql/bin path )
到你的家目录的 .login 文件里面去.如果你使用 Bourne shell 变种,如 sh,ksh,或bash,你应该加入
% PATH=/usr/local/pgsql/bin:$PATH
% export PATH
到你的家目录中的 .profile 文件中去.从现在开始,我们假设你已经把 Postgres 的二进制目录加入到你的路径里去了.另外,我们在本文档中将经常使用“设置 shell 变量” 或 “设置环境变量”这些字眼.如果你还不太明白上一段关于修改你的搜索路径的描述,请先参考UNIX的手册页中关于你用的shell的文档,然后再往下读.
如果节点数据库管理员并没有按缺省的方式设置数据库,那么你还有一些事情要做.比如,如果数据库服务器是一台远程的机器,你需要设置PGHOST 环境变量为数据库服务器的机器名. 环境变量 PGPORT可能也需要设置,最后一招:如果当你试着启动一个应用而该应用报告说不能与postmaster 建立联接时, 你应该马上与你的数据库管理员联系以确保你正确地设置了环境变量.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
启动 SQL 界面(psql)
假设你的数据库管理员已经成功地运行了postmaster 并且给你了使用数据库的权限,你(作为一个用户)就可以运行应用了.我们前面已经提到过,你应该将/usr/local/pgsql/bin 加入到你的搜索路径中去.在大多数情况下,这是你在准备阶段所要做的所有工作.
我们支持两种不同的联接方式.数据库管理员将选择是否允许TCP/IP网络联接或是只允许本地(同一台机器)的socket(套接字)联接.这种选择在你与数据库联接碰到问题时就特别重要了.T
如果你在执行 Postgres 命令(如 psql 或 createdb)时碰到下面的错误输出:
% psql template1
Connection to database 'postgres' failed.
connectDB() failed: Is the postmaster running and accepting connections
at 'UNIX Socket' on port '5432'?
或
% psql -h localhost template1
Connection to database 'postgres' failed.
connectDB() failed: Is the postmaster running and accepting TCP/IP
(with -i) connections at 'localhost' on port '5432'?
错误的原因通常是
postmaster 没有运行,或
你连错了服务器主机.
如果错误信息象下面这样:
FATAL 1:Feb 17 23:19:55:process userid (2360) != database owner (268)
表明数据库管理员用错误的用户启动了 postmaster .告诉他以Postgres超级用户身份重起.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
管理数据库
现在Postgres 已经装好并运行起来了,我们就可以创建一些数据库来做一些实验.我们通过这种方法来描述如何管理数据库的基本命令。
大多数 Postgres 应用假定你的数据库名(如果没有指明的话)就是你的计算机用户名.
如果你的数据库管理员给你的数据库帐号没有创建数据库的权限,那么她应该告诉你你的数据库名.如果是这样,你可以略过创建和删除数据库的章节.
创建数据库
假设你想创建一个叫 mydb 的数据库.你可以用如下命令来创建:
% createdb mydb
如果你没有创建数据库的权限,你会看到如下的信息:
% createdb mydb
WARN:user "your username" is not allowed to create/destroy databases
createdb: database creation failed on mydb.
Postgres 允许你在一个节点上创建任意多个数据库,并且你将自动成为你所创建的数据库的管理员.数据库名必须以字母开头并且小于32个字符长.并不是每个用户都能成为数据库管理员.如果Postgres拒绝为你创建数据库.你应该向节点数据库管理员请求给予创建数据库的权限.出现这种情况时请与你的节点管理员联系。
访问数据库
一旦你建好了一个数据库,你可以通过下面手段访问它:
运行 Postgres 的终端监控程序(如 psql),你可以交互地输入,编辑和运行SQL 命令.
使用现有的本地前端工具,比如 pgaccess 或 ApplixWare (通过 ODBC)来创建和操作数据库.
使用一种具有支持 Postgres 接口的语言,如 perl 或 tcl.这些语言中有些还有一些非常方便和强大的 GUI 工具,这些工具可以帮你构造客户应用.我们上面说的 pgaccess,就是一个用 tk/tcl 写的类似工具的例子.
写一个 使用 LIBPQ 库的 C 程序. 你便可以在C里面提交一个 SQL 命令并且在程序里面得到结果和状态的响应. 这些接口将在程序员手册里进一步讨论。
你可以运行 psql,试一下本手册里的例子.你可以用下面命令激活 mydb 数据库:
% psql mydb
将提示下面的问候信息:
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: template1
mydb=>
这个命令提示符表明终端监控器正等候你的输入,你可以向由终端监控器维护的工作区键入SQL 查询. psql 对由反斜杠开头的字符进行转义,“\” 比如你可以通过键入下面字符获得各种 PostgresSQL 命令的语法帮助:
mydb=> \h
一旦你完成了向工作区的查询输入,你可以键入下面字符把工作区的内容提交给Postgres 服务进程:
mydb=> \g
T这句话告诉服务进程执行查询.如果你以分号结束你的查询,“\g” 可以不输入. psql 将自动处理分号结尾的查询.如果从一文件中读取查询,比如说从 myFile,键入:
mydb=> \i fileName
从 psql 退出到 UNIX,键入
mydb=> \q
psql 将退出到命令行.(有关更多转义符的信息,在监控器提示符下键入 \h .)空白(如,空格,制表符和新行)可在 SQL查询里自由使用.单行注释使用 "--".在 "--"后面该行的所有内容都将被忽略.多行注释使用 "/* ... */".
删除数据库
如果你是数据库mydb 的管理员,你可以用下面UNIX命令删除该数据库:
% dropdb mydb
这个命令物理上删除所有与该数据库关联的UNIX文件,这个动作是不可逆的,因而执行这个动作之前一定要三思而后行.
----------------------------------------------------------------------------