psql 客户端使用
专栏内容:
- postgresql内核源码分析
- 手写数据库toadb
- 并发编程
开源贡献:
- toadb开源库
个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.
系列文章
- 初始化集群
- 数据库服务管理
- psql客户端使用
前言
postgresql 数据库是一款通用的关系型数据,在开源数据库中能与商业数据媲美,在业界也越来越流行。
因为是开源数据库,不仅公开源码,还有很多使用案例,好用的插件,所以它的慢慢变成了数据库的先驱和标准,通过postgresql可以很好从使用到原理,彻底搞懂;
如果是学习编程,也可以学到丰富的编程知识,数据结构,编程技巧,它里面还有很多精妙的架构设计,分层思想,可以灵活定制的思想。
本专栏主要介绍postgresql 入门使用,数据库维护管理,通过这些使用来了解数据库原理,慢慢了解postgresql是什么样的数据库,能做那些事情,以及如何做好服务,最关键的是这些知识都是面试的必备项。
概述
数据库服务在后台运行,除了开发应用程序,通过jdbc,odbc等与它交互外,如何能操作数据库呢?
像oracle,mysql一样,postgresql也有自己的客户端,可以很方便数据库开发人员看到数据库中的结构,查询数据库中的数据,尤其像图形化客户端,帮助我们减少SQL编程,通过图形化选择就可以轻松搞定数据库的设计;
当然也有命令行的客户端,相对图形化界面来讲,很轻量,也可以被其它应用嵌入使用,但是需要对数据库有一定了解,对数据库结构了然于胸;其实用习惯了命令行,反而觉得界面比较麻烦。
本文主要分享命令行客户端的常用命令和方法;
命令行客户端
客户端当然离不开命令行方式,因为在大多数linux下都是使用命令行;
postgresql 在安装时,就自带了一个功能强大的命令行客户端工具 psql ,它就在安装目录的bin目录下面;
命令说明
先来看一下psql自身的帮助
[senllang@hatch bin]$ ./psql --help
psql is the PostgreSQL interactive terminal.
Usage:
psql [OPTION]... [DBNAME [USERNAME]]
General options:
-c, --***mand=***MAND run only single ***mand (SQL or internal) and exit
-d, --dbname=DBNAME database name to connect to (default: "senllang")
-f, --file=FILENAME execute ***mands from file, then exit
-l, --list list available databases, then exit
-v, --set=, --variable=NAME=VALUE
set psql variable NAME to VALUE
(e.g., -v ON_ERROR_STOP=1)
-V, --version output version information, then exit
-X, --no-psqlrc do not read startup file (~/.psqlrc)
-1 ("one"), --single-transaction
execute as a single transaction (if non-interactive)
-?, --help[=options] show this help, then exit
--help=***mands list backslash ***mands, then exit
--help=variables list special variables, then exit
Input and output options:
-a, --echo-all echo all input from script
-b, --echo-errors echo failed ***mands
-e, --echo-queries echo ***mands sent to server
-E, --echo-hidden display queries that internal ***mands generate
-L, --log-file=FILENAME send session log to file
-n, --no-readline disable enhanced ***mand line editing (readline)
-o, --output=FILENAME send query results to file (or |pipe)
-q, --quiet run quietly (no messages, only query output)
-s, --single-step single-step mode (confirm each query)
-S, --single-line single-line mode (end of line terminates SQL ***mand)
Output format options:
-A, --no-align unaligned table output mode
--csv CSV (***ma-Separated Values) table output mode
-F, --field-separator=STRING
field separator for unaligned output (default: "|")
-H, --html HTML table output mode
-P, --pset=VAR[=ARG] set printing option VAR to ARG (see \pset ***mand)
-R, --record-separator=STRING
record separator for unaligned output (default: newline)
-t, --tuples-only print rows only
-T, --table-attr=TEXT set HTML table tag attributes (e.g., width, border)
-x, --expanded turn on expanded table output
-z, --field-separator-zero
set field separator for unaligned output to zero byte
-0, --record-separator-zero
set record separator for unaligned output to zero byte
Connection options:
-h, --host=HOSTNAME database server host or socket directory (default: "local socket")
-p, --port=PORT database server port (default: "5432")
-U, --username=USERNAME database user name (default: "senllang")
-w, --no-password never prompt for password
-W, --password force password prompt (should happen automatically)
For more information, type "\?" (for internal ***mands) or "\help" (for SQL
***mands) from within psql, or consult the psql section in the PostgreSQL
documentation.
Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>
使用说明
有几个常用的参数,在这里列一下
一般登陆使用的参数
- -d database name , 指定要连接的数据库的名字,每个连接都需要指定到数据库
- -U username, 登陆数据库要使用的数据库用户名
- -h hostname , 指定数据库服务的IP或,如果为localhost,可以不指定;
- -p port 数据库服务的port端口号,默认5432时,也不需要指定;
默认数据库名和用户名是一样的, 同当前的系统用户名;如果当前系统用户名不是postgres,那就需要指定数据库名;
这里需要注意下,因为数据库集群中默认会创建一个postgres的数据库,当前初始化时没有指定用户名,默认是当有系统用户名;
举例说明,新初始化的集群,启动后,用psql进行连接,超级用户名为senllang, 数据库为postgres, 主机名为localhost, 端口号为5432;
[senllang@hatch bin]$ ./psql -d postgres
psql (16beta1)
Type "help" for help.
从文件执行SQL的参数
假如我们要从文件导入,除了指定上面的参数以外,还有
- -f file ,指定带路径的文件名;
假如我们有一个createtable.sql的文件,通过执行文件来创建表,文件内容如下:
--
create table tbl_user(id int, name varchar, ssex varchar);
使用psql执行文件
[senllang@hatch bin]$ ./psql -d postgres -f createtable.sql
CREATE TABLE
可以看到它执行成功了;
直接执行SQL
使用psql 也可以直接执行SQL语句,这个功能也非常好用,比如在shell中就可以调用psql操作数据库;
- -c ***mand , 指定要执行的命令,用双引号括起来
现在向刚才创建的表中插入一条数据
[senllang@hatch bin]$ ./psql -d postgres -c "insert into tbl_user values(1,'xiucai','male');"
INSERT 0 1
常用命令
通过psql, 我们连接上数据库后,如何使用呢?
下面我们介绍几个常用的命令和用法;
- SQL命令帮助,可以执行 \h
- 查看当前数据库下的用户表 \d ,会显示出来所属的schema,own 用户名等;
postgres=# \d
List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | tbl_user | table | senllang
(1 row)
- 查看当前集群中的database列表 \l
postgres=# \l
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | A***ess privileges
-----------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
postgres | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | |
template0 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =c/senllang +
| | | | | | | | senllang=CTc/senllang
template1 | senllang | UTF8 | icu | en_US.UTF-8 | en_US.UTF-8 | en-US | | =c/senllang +
| | | | | | | | senllang=CTc/senllang
(3 rows)
可以到已经有3个数据库,其中两个template0,template1是模版数据库,也就是生成其它数据库的模版,而postgres就是默认创建的可以使用的数据库;
- 切换用户或数据库 \c
postgres=# create database db_factory;
CREATE DATABASE
postgres=# \c db_factory
You are now connected to database "db_factory" as user "senllang".
db_factory=#
再新创建一个数据库db_factory,然后切换到该数据库,默认使用当前登陆的用户名;
总结
自带的 psql命令行客户端,非常实用,以上分享了一些它的用法和常用命令,其它我们在以后的分享中逐淅再接触。
了解psql之后我们就可以真正的开始数据库使用了,以上在演示过程中已经输入了一些SQL命令,如果你已经掌握一些SQL,那么就可以在psql连接数据库之后开始输入SQL,开始你的数据库设计了。
结尾
非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!
作者邮箱:study@senllang.onaliyun.***
如有错误或者疏漏欢迎指出,互相学习。
注:未经同意,不得转载!