所有psql命令都以 开头
一、使用psql -l查看有哪些数据库:
-bash-4.2$ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | (4 rows)
创建数据库的时候默认是hi从template克隆出来的。
l 同psql -l
d 查看表
c 连接数据库
postgres=# create database testdb; CREATE DATABASE postgres=# c testdb; You are now connected to database "testdb" as user "postgres". testdb=# d No relations found. testdb=# create table t(id int primary key, name varchar(40)); CREATE TABLE testdb=# d List of relations Schema | Name | Type | Owner --------+------+-------+---------- public | t | table | postgres (1 row)
psql -h <hostname or ip> -p <port> [数据库名称] [用户名称]
二、d
2.1 d 列出当前数据库所有表;
2.2 d table_name,显示表结构定义;
testdb=# d t Table "public.t" Column | Type | Modifiers --------+-----------------------+----------- id | integer | not null name | character varying(40) | Indexes: "t_pkey" PRIMARY KEY, btree (id)
d 显示索引信息。
testdb=# d t_pkey Index "public.t_pkey" Column | Type | Definition --------+---------+------------ id | integer | id primary key, btree, for table "public.t"
d+ table_name 显示比d更详细的信息。
如果只想显示匹配的表 dt
如果只想显示索引 di
如果只想显示序列 ds
如果只想显示视图 dv
如果只想显示函数 df
显示SQL执行的时间 iming on
列出所有schema
显示所有表空间 db
显示数据库中所有角色或者用户 du 或者 dg
显示表的权限分配情况 dp 或者 z
三、使用encoding 命令指定字符集 encoding utf8;
四、pset命令---用于设置输出的格式
pset border0: 表示输出内容无表框;
pset border1: 表示内部显示边框
pset border2: 表示内部都有边框
testdb=# select * from t; id | name ----+------ (0 rows) Time: 0.522 ms testdb=# pset border 2; Border style is 2. testdb=# select * from t; +----+------+ | id | name | +----+------+ +----+------+ (0 rows) Time: 0.585 ms testdb=#
五、x命令,把表中每一行的每列数据都拆分为单行显示;同mysql /G
六、执行存储在外部文件的SQL命令;
1、 i <文件名> 执行存储在外部文件中的sql语句或者命令;
2、echo 显示数据一行信息;
testdb=# echo hello word hello word
3、更多命令使用 ? 查看;
七、自动提交方面的技巧。
在psql中事物是自动提交的。如果不想自动提交,方法有两种
方法一:运行begin;命令,然后执行dml语句,最后再执行commit或rollback语句。
testdb=# begin; BEGIN Time: 0.428 ms testdb=# update t set name='xxx' where id=1; UPDATE 1 Time: 0.743 ms testdb=# select * from t; +----+------+ | id | name | +----+------+ | 2 | haha | | 1 | xxx | +----+------+ (2 rows) Time: 0.507 ms testdb=# rollback; ROLLBACK Time: 0.317 ms testdb=# select * from t; +----+--------+ | id | name | +----+--------+ | 1 | steven | | 2 | haha | +----+--------+ (2 rows) Time: 0.584 ms testdb=#
方法二:直接使用psql中的命令关闭自动提交的功能。
set AUTOCOMMIT off \AUTOCOMMIT必须大写
八、如何得到psql中命令实际执行的SQL
如果在启动psql的命令行中加 -E ,就可以把pslq中执行的命令实际SQL打印出来:
临时起作用打印SQL的命令:set ECHO_HIDDEN on | off