注意: 如果你是安装好PostgreSQL,默认只有一个数据库用户 postgres (不包含root)
PostgreSQL的所有命令都是针对某一个用户的,比如默认情况下,只有 postgres 用户才有数据库,也只有该用户对数据的操作有意义
更改用户命令: # su postgres
安装的过程并不复杂和其他源码版本的安装方法类似:
解压到 /usr/local/src:
# tar xvfz postgresql-7.1.3.tar.gz
# cd postgresql-7.1.3
# ./configure --prefix=/usr/local/pgsql
# make
# make install
# chown -R postgre.postgre /usr/local/pgsql
这样安装完毕后,并不是万事大吉了,还有一些收尾工作要做:
# vi ~postgre/.bash_profile
添加:(路径依据个人情况修改)
PGLIB=/usr/local/pgsql/lib
PGDATA=$HOME/data
PATH=$PATH:/usr/local/pgsql/bin
MANPATH=$MANPATH:/usr/local/pgsql/man
export PGLIB PGDATA PATH MANPATH
以 postgres 用户登录,
# su - postgre
建立数据库目录:
$ mkdir data
启动数据库引擎:
$ initdb
[postgre@www postgre]$ initdb
。。。
Success. You can now start the database server using:
/usr/local/pgsql/bin/postmaster -D /home/postgre/data
or
/usr/local/pgsql/bin/pg_ctl -D /home/postgre/data start
$ postmaster -i -D ~/data &
[1] 22603
[postgre@www postgre]$ DEBUG: Data Base System is starting up at Thu Jan 31 02:00:44 2002
DEBUG: Data Base System was shut down at Thu Jan 31 01:57:58 2002
DEBUG: Data Base System is in production state at Thu Jan 31 02:00:44 2002
这样 PostgreSQL 使用位于 /usr/local/pgsql/data 的数据库,允许 Internet 用户的连接( -i ) ,并在后台运行。
创建一个用户:
#su
#su postgres
#createuser <new-user>
如何导出PostgreSQL数据库中的数据:
#pg_dump -U postgres -f dump.sql mydatabase
具体某个表
#pg_dump -U postgres -t mytable -f dump.sql mydatabase
导入数据时首先创建数据库再用psql导入
:
#createdb newdatabase
#psql -d newdatabase -U postgres -f dump.sql
通常状况下,psql 提供一个带有 psql 正在与之联接的接数据库名的,后缀 "=>" 的提示符.例如.
$ psql testdb
SQL几个语法
创建一个表格
CREATE TABLE villes (
ville varchar(80) primary key,
emplacement point
);
插入数据
INSERT INTO villes VALUES ('San Francisco', '(-194.0, 53.0)');
查看表格数据
SELECT * FROM villes;
删除表格
DELETE FROM nom_table
;
命令行选项
psql 可接受下面的命令行选项:
-
-A
- 当打印输出表元素时关闭填充对齐. -c query
- 声明 psql 将执行一条查询字串,query, 然后退出.这一点对shell 脚本很有用,尤其是在 shell 脚本里与-q 选项相联时. -d dbname
- 声明要联接的数据库名.等效于将 dbname 作为命令行最后一个域输出. -e
- 回现送给后端的查询 -f filename
- 使用 filename 作为查询的语句源而不是交互式读入查询,该文件必须为客户前端可见. -F separator
- 使用 separator 作为域分隔符.缺省是一个 ASCII 竖直条 ("|"). -h hostname
- 声明正在运行 postmaster 的主机名.如果没有此选项,将使用本地的Unix主控套接字进行通讯. -H
- 打开 HTML 3.0 格式输出. -l
- 列出所有可用的数据库,然后退出.其他非连接选项将被忽略. -n
- 不使用用于输入行编辑和命令历史的行输入库. -o filename
- 将所有输出定向到文件 filename. 路径必须是客户端可写的. -p port
- 声明被 postmaster 用于侦听的 TCP/IP 端口或使用的缺省本地Unix主控套接字文件句柄.缺省的是环境变量 PGPORT 的值(如果存在的话)或者是5432. -q
- 声明 psql 将"安静地"执行处理任务.缺省时psql将打印欢迎和退出信息,并且提示输入每个查询和打印输出查询返回的行数.如果使用了此选项,这些都不出现.这在和 -c 选项一起使用时很有效. -s
- 进入单步模式运行,这时每个查询在发往后端之前都要提示用户. -S
- 进入单行运行模式,这时每个查询都将由换行符结束,而不是分号. -t
- 关闭打印列/字段名.这在shell脚本中与 -c 选项一起使用时有用. -T table_options
- 允许你使用 HTML 3.0 格式输出时声明放在表 table ... 中的标记选项.例如,border 将给你的表边框.这个选项必须与 -H 选项一起使用. -u
- 在和数据库联接之前询问用户的用户名和口令.如果数据库不需要口令认证则这些将被忽略.如果此选项没有使用(而且没有设置 PGPASSWORD 环境变量)而数据库又需要口令认证,则联接失败.用户名将被忽略. -x
- 打开扩展行格式模式.当此选项有效时每一行都将把列/字段名打印在左边而把列/字段值放在右边.这对于那些难以在一行输出的超长行特别有用.HTML 行输出也支持此模式.
你可以通过设置环境变量来避免在命令行上键入这些参数,参阅下面环境变量的部分.
psql 后期命令
你在 psql 里输入的任何以脱字符反斜杠('/')开头的东西都是psql 后期命令.其他的都是 SQL 并且只是简单的进入当前的查询缓冲 (并且一旦你已经有了一个完整的查询,该查询将自动提交给后端).psql 后期命令也叫斜杠命令.
一个 psql 命令的格式是反斜杠后面紧跟一个命令动词,然后是任意参数.参数与命令动词和其他参数以任意个空白字符间隔.
由于历史原因,对于单字符的命令动词,你实际上不需要用空白字符将命令动词和参数分隔开.不过你最好还是加上空白字符.
下列后期命令是已定义的.
-
/a
- 在打印表元素时切换字段对齐模式(开或关). /C caption
- 将 HTML3.0 表标题设为 “caption ”. /connect dbname [ username ]
- 与一个新的数据库建立一个联接,如果没有声明 username 则使用缺省值.前面的联接将关闭. /copy dbname { FROM | TO } filename
- 执行前端(客户端)拷贝.这是一个运行 SQL COPY 命令的操作,不同的是 SQL COPY 是后端在读写声明的文件,并且对应的需要后端访问和特殊的用户权限,而在此命令中 psql 读写文件并将数据从后端中取出或写入.将使用缺省的分隔符.
- 列出数据库中的表,或(如果声明了)表 table 的列/字段.如果表名是用统配符 (“*”)声明的,列出所有表和表的列/字段信息. /da
- 列出所有可用聚集. /dd object
- 列出 pg_description 里对声明的对象的描述,对象可以是一个表,表中的列/字段,类型,操作符或聚集.
- 列出函数. /di
- 只列出索引. /do
- 只列出操作符. /ds
- 只列出序列. /dS
- 列出系统表和索引. /dt
- 只列出非系统表. /dT
- 列出类型. /e [ filename ]
- 编辑当前查询缓冲或文件 filename 的内容. /E [ filename ]
- 编辑当前查询缓冲或文件 filename 的内容并且在编辑结束后执行之. /f [ separator ]
- 设置域分隔符.缺省是单个空白. /g [ { filename | |command } ]
- 将当前查询输入缓冲送给后端并且(可选的)将输出放到 filename 或通过管道将输出送给一个分离的Unix shell 用以执行 command. /h [ command ]
- 给出声明的 SQL 命令的语法帮助.如果 command 不是一个定义的 SQL 命令(或在 psql 里没有文档),或没有声明 command ,这时 psql 将列出可获得帮助的所有命令的列表.如果命令 command 是一个通配符(“*”),则给出所有 SQL 命令的语法帮助. /H
- 切换 HTML3 输出.等效于 -H 命令行选项. /i filename
- 从文件 filename 中读取查询到输入缓冲. /l
- 列出服务器上所有数据库. /m
- 切换老式监视器样的表输出,这时表周围有边界字符包围着.这是标准 SQL 输出.缺省时,psql 只包括列/字段间的分隔符. /o [ { filename | |command } ]
- 将后面的查询结果输出到文件 filename 或通过管道将后面结果输出到一个独立的Unix shell 里执行 command. 如果没有声明参数,将查询结果输出到 stdout. /p
- 打印当前查询缓冲区. /q
- 退出 psql 程序. /r
- 重置(清空)查询缓冲区. /s [ filename ]
- 将命令行历史打印出或是存放到 filename. 如果省略 filename ,将不会把后继的命令存放到历史文件中.此选项只有在 psql 配置成使用输入行时才有效. /t
- 切换输出的列/字段名的信息头和行记数脚注(缺省是开). /T table_options
- 允许你在使用HTML 3.0 格式输出时声明放在表 table ... 中的标记选项.例如,border 将给你的表以边框.这必须和 /H 后期命令一起使用. /x
- 切换扩展行格式.当打开时,每一行将在左边打印列/字段名而在右边打印列/字段值.这对于那些不能在一行输出的超长行是很有用的.HTML 行输出模式也支持这个标记. /w filename
- 将当前查询缓冲区输出到文件 filename. /z
- 生成一个带有正确 ACL(赋予/禁止 权限)的数据库中所有表的输出列表. /! [ command ]
- 回到一个独立的Unix shell或执行一个Unix 命令 command. /?
- 获得关于反斜杠 (“/”) 命令的帮助.
/d [ table ]小技巧: 此操作不象 SQL COPY 命令这样高效,因为所有数据必须通过(客户/服务器))client/server IP 或套接字联接.对于大数据量的操作,另一种方法(SQL COPY)更可行.
小技巧: 并非所有对象在 pg_description 里有描述.此后期命令在快速获取 Postgres 内部特性时很有用./df
常见问题:
1。你已经安装好postgresql且运行,但是还是不能链接到数据库,那可能你没有配置PGLIB等信息,可以回到本文前面试一下
2. 如果配置都ok,而且数据库手动可启动,但是用 psql,活在createdb等命令却提示无法链接数据库点错误并且还带有 端口5433 (只要不是5432的),可基本肯定你装过postgresql,而且没有删除干净现在又重新安装了一遍。
解决方法是:找到 /etc/postgresql/8.3/main/postgresql.conf (路径依个人情况而定),然后搜索 port 的那行,改为5432 ,保存重新启动postgresql服务器。
如果大家还有其他经验可以回复,我会贴上来然大家借鉴
参考资料:
http://www.lslnet.com/linux/books/postgreSQL/app-psql.htm
http://blog.youkuaiyun.com/zzw45/archive/2004/07/22/48513.aspx