目录
第三章实例管理与管理工具
概述
3.1 实例管理
pg_ ct1 init[db] [-D datadir] [-s] [-o ini tdb- options]
pg_ ct1 start [-D datadir] [-1 filename] [-W] [-t seconds] [-s] [-o options] [-p path] [-c]
pg_ ct1 stop [-D datadir] [-m s[mart]I f[ast]I i [mmediate] ] [-W] [-t seconds] [-s]
pg_ _ct1 restart [-D datadir] [-m s[mart] | f[ast] | i [mmediate] ] [-w] [-t seconds] [-s] [-o options] [-c]
pg_ ct1 reload [-D datadir] [-s]
pg_ ct1 status [-D datadir]
pg_ ct1 promote [-D datadir] [-W] [-t seconds] [-s]
pg_ ct1 ki11 signal_ name process_ id
1 启动实例
[postgres@Redhat7 ~]$ pg_ctl start -D /pgdb/
2 关闭实例
pg_ ctl stop [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t seconds] [-s]
■-m :数据库关闭的模式
-smart :等待所有数据库连接断开后再关闭数据库
- fast :回滚所有活动事务,然后强制断开所有会话,最后再正常关闭数据库
一immediate :立即终止所有服务器进程,等于宕机,下次启动会进入恢复状态。不推荐使用
[postgres@Redhat7 ~]$ pg_ctl stop -D /pgdb –m f
waiting for server to shut down.... done
server stopped
■PostgreSQL支持 十多种认证方法,常见的有trust、reject. md5和password等
- trust不需要密码
- reject拒绝登录
md5使用双重md5加密密码
- password使用明文密码
3.2psql内置命令(元命令)
psql是一个PostgreSQL的基于终端的前端。它让你能交互式地键入查询,把它们发送给PostgreSQL,并且查看查询结果。或者,输入可以来自于一个文件或者命令行参数。此外,psql还提供一些元命令和多种类似 shell 的特性来为编写脚本和自动化多种任务提供便利。
psql是PostgreSQL的交互终端,等同于Oracle中的sqlplus。执行该命令连接数据库时, 默认的用户和数据库是postgres
psql -h <hostname or ip> -p <端口> [数据库名称] [用户名称]
psql -h 127.0.0.1 -p 5432 -d database -U postgres
-h 数据库ip ,-p 端口号 ,-d 数据库名 -U 登录用户名
#\c 数据库名 :切换数据库,相当于mysql的use dbname
#\q :退出 psql
#\l :列举数据库,相当于mysql的show databases
#\dt :列举表,相当于show tables
#\d 表名 :查看表结构,相当于desc tblname
#\conninfo :显示当前连接的相关信息
#\timing :切换命令计时开关 (目前是 关闭)
#\! [命令] :在 shell 里执行命令或开启一个shell
#\a :在非对齐模式和对齐模式之间切换
#\C [标题] :设定资料表标题或取消
#\f [分隔符] :显示或设定非对齐模式的栏位分隔符号
#\H :切换 HTML 输出模式 (目前是 关闭)
#\o [文件名] :将全部查询结果写入档案或 |管道"pipe"
#\db [数据库名] :列出表空间
#\du [数据库名] :列出角色
#\p :显示查询缓存区的内容,即打印上一个SQL命令
#\cd [目录] :改变目前的工作目录
#\i 文件名 :从文件中执行命令
#\echo [字串] :将字串写至标准输出
#\w [文件名] :将上一个SQL命令输出到指定的文件或管道"pipe"
#\g [文件名] :将上一个SQL命令的结果输出到指定文件或管道"pipe"
#\o [文件名] :将后面的全部查询结果输出到指定文件或管道"pipe",直到遇到下一个单独的 #\o
#\unset 变量名称 : 清空(删除)内部变量
#\encoding [编码名称] :显示或设定客户端编码
#\password [用户名称] :安全地为用户改变口令
#\prompt [变量名称] :提示用户设定内部变量
#\set [变量名称 [变量值]] :设定内部,若无参数则列出全部变量
3.3.1 Psql的两种操作模式:交互模式与非交互模式
1 交互模式
直接在操作系统的命令行界面上键入psql并回车,从操作系统提示符切换到psql提示符后就表示已经进入了psql 的交互模式界面。你现在就可以执行命令了,记得要输入分号作为命令结束标记,要是不输就直接回车的话,psql 会认为命令还未输入完成,会在换行后等待继续输人。
2 非交互模式
要在非交互模式下使用psql,请从OS命令提示符执行psql,并给其传送-一个脚本 文件。psql的“非交互模式”是指在调用psql时直接以选项的形式指定要执行的脚本,脚本中可以含有任意数量的SQL和psql语句,然后psql会自动执行此脚本的内容,期间无需与用户进行交互,这就是“非交互模式”的本意。要在非交互模式下执行脚本文件,只需使用-f选项即可
psql -f script_ file
要在非交互模式下执行SQL语句,只需使用-c选项即可,如果要- -次执行多个语句,语句之间请用分号分隔:
psql -d postgresql -C "DROP TABLE IF EXISTS dross; CREATE SCHEMA staging;"
3.3.2 定制psql缺省环境
1 设置设置语句执行时间
编辑用户主目录 下的.psqlrc文件
vi ~/.psqlrc
\timing on
2 Tab键自动补全
psql对Tab键自动补全功能的支持是一个很赞的特性,能够在没有完全记住数据库对象名称或者SQL命令语法的情况下使用,帮助用户轻松地完成各项数据库维护工作。如下所示:
T_STATION=# select * from t_test;
3.3.3 psql使用技巧
1 用watch命令重复执行语句
\watch命令是PostgreSQL 9.3版中为psql引人的一项新功能。它可以实现以固定的频率反复执行某个语句,以便持续观察其输出。例如你需要持续监控系统中当前正在执行的所有语句的情况。
每10秒钟,查询一次执行的sql语句。
SELECT datname, query FROM pg_stat_activity WHERE pid != pg_backend_pid(); \watch 10
2 执行存储在外部的sql语句
\i 文件名
osdba=# \i getrunsql
3 可以使用通配符 *
\d+ t*
3.3.4 psq|如何传递变量到SQL
1内部 \set 方式
\set元子命令可以设置变量,格式如下所示,name表示变量名称,value 表示变量值,如果不填写value,变量值为空,也是取消变量。
\set name Value
T_STATION=# \set v 2
T_STATION=# select * from t_test where id=:v;
2 外部-v参数方式
[postgres@pghost1 -1s paql -v v=1 mydb pquser -f 1.sql
id1 name
-------+------
1|a
(1 row)
3.3.5使用psq|实现数据的导入和导出
psql支持一个叫作\copy的命令,该命令可以将数据导出到文本文件中,同时也可以从文本文件中导人数据。文本文件中默认使用制表符作为分隔符,当然你也可以指定使用其他分隔符。文本中必须使用换行符来分隔不同的行,否则无法正确区分两行记录。
1 使用psql导入数据
T_STATION=# \copy t_test from /home/postgres/t.csv;
COPY 2
Time: 2.338 ms
2使用Psql导出数据
使用条件导出
T_STATION=# \copy (select * from t_test where id>19) to '/home/postgres/t.csv';
COPY 1
Time: 1.326 ms
全部导出
T_STATION=# \copy t_test to '/home/postgres/tall.csv';
COPY 20
Time: 0.224 ms
导出数据带抬头HEADER
T_STATION=# \copy (select * from t_test where id<1) to '/home/postgres/t.csv' with csv HEADER;
COPY 2
Time: 0.345 ms
[postgres@pg11m ~]$ cat /home/postgres/t.csv
id,info,c_time
0,jjj,1989-01-01 00:00:00
0,syj,1985-01-19 00:00:00
3 修改的数据导入
需要注意的地方分隔符是tab
T_STATION=# \copy t_test from /home/postgres/t.csv;
COPY 1
Time: 0.756 ms
不使用默认分隔符DELIMITER
[postgres@pg11m ~]$ cat /home/postgres/t.csv
0,syj,1985-01-19
T_STATION=# \copy t_test from /home/postgres/t.csv DELIMITER ',';
COPY 1
Time: 0.770 ms
3.3.7 帮助
postgres=# help
You are using psql, the command-line interface to PostgreSQL.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
postgres=# \?
General
\copyright show PostgreSQL usage and distribution terms
\crosstabview [COLUMNS] execute query and display results in crosstab
\errverbose show most recent error message at maximum
3.3.8 Psql常用命令
1 查看与切换数据库
\l 查看数据库 \c 切换数据库
postgres=# \l
\c 可选参数 dbname [ username ] [ host ] [ port ]
postgres=# \c template0
FATAL: database "template0" is not currently accepting connections
Previous connection kept
2 查看数据库对象
#\dt :列举表,相当于show tables
#\d 表名 :查看表结构,相当于desc tblname
#\db [数据库名] :列出表空间
#\du [数据库名] :列出角色
#\dn 展示当前数据库下所有schema信息
SHOW search_path; 显示当前使用的schema
\dxx[S+]
xx各种不同对象
S显示系统对象
+显示详细信息
atlasdb=# create table test1(id int,name varchar(32),age int);
CREATE TABLE
可以使用通配符
atlasdb=# \d+ test*
4 psql字符集
\encoding :显示数据库编码
postgres=# \encoding
UTF8
show client_ encoding; : 查看客户端编码
postgres=# show client_ encoding;
client_ encoding
UTF8
(1 row)
设定客户端编码
postgres=# set client_ encoding to ' GBK ;
SET
postgres=# show client_ encoding;
client_ encoding
GBK
(1 row)
X psql常用其他内置命令
\timing on :命令运行时间
\pset :输出的显示格式
- \pset border 0 :输出无边框
- \pset border 1 :输出有内边框
- \pset border 2 :输出有内外边框
\x: 以列式显示每行数据
\i :执行外部脚本文件
\echo :输出- -段文本
3.3 pgAdmin
pgAdmin,一个设计,维护和管理 Postgres 数据库用的通用工具。