1. 如果使用与操作系统用户名不相同的数据库用户名连接数据库时,需要指定对应的用户名和数据库名称:
psql -h 127.0.0.1 -p 5432 -U 用户名 -d 数据库名
或
sudo -u postgres psql
2. 获取当前db中所有的表信息。
select * from pg_tables;
3.想要进一步查看表结构,可以使用\d 表名
3.1\d命令后面的表名或索引名可以使用通配符,如“”或“?”,使用\d x?命令可以匹配数据库名以x开头的数据库
3.2使用\d t* 命令可以匹配包含数据库名为t的数据库
3.3 \d+命令可以显示更详细的信息
3.4\di命令只显示索引
postgres=# \d tb_test;
数据表 "public.tb_test"
栏位 | 类型 | Collation | Nullable | Default
------+----------------+-----------+----------+---------
id | integer | | |
name | character(100) | | |
4.\du或\dg命令显示数据库中所有角色或用户
5.\dp或\z命令显示表的权限分配
6.直接在命令行中操作sql ***mand
select * from machine.activity_monitor_configuration;
select * from machine.usg_calibration data;
7.为了方便分析数据,有时需要将查询结果写入文件,可以使用\o命令
7.1如果需要输出的不带任何边框,使用命令\pset border 0
7.2如果需要使用逗号分隔或以Tab分隔,使用\pset format unaligned命令
7.3默认分隔符是“|”,可以使用\pset fieldsep命令来设置分隔符,如更改为Tab分隔符:\pset fieldsep '\t'
\o /data/wb_drive/LOG_STORAGE/output1.txt
\pset border 0
\pset format unaligned
\pset fieldsep '\t'
select * from pg_tables;
8.使用cat命令或view命令可以查看刚才保存的文件
9.\i <文件名>用于执行存储在外部的文件中的SQL语句或命令
也可以直接在psql命令行使用-f <文件名>来执行SQL脚本,此处的-x命令的作用相当于在psql中交互模式下运行\x命令
\x
\i xxx.sql
psql -x -f xxx.sql
PostgreSQL操作-psql命令详解
一、建立连接
psql -h hostname -p port -U username -d dbname
-d dbname
--dbname=dbname
指定要连接的数据库的名称
-h hostname
--host=hostname
指定运行服务器的机器的主机名
-p port
--port=port
指定服务器用于监听连接的 TCP 端口或者本地 Unix 域套接字文件扩展,如果没有设置,则默认为编译时指定的端口号(通常是5432)
-U username
--username=username
指定连接的用户名
将上述参数替换成自己的连接参数后,按回车键会提示输入口令, 此时输入密码后按回车键就可以建立连接了。
二、操作数据库
psql命令的格式是用反斜线后面直接跟上一个命令动词,然后是一些参数。参数与命令动词和其他参数之间用任意多个空白字符分隔开。
1、打印当前工作目录: \! pwd
2、列出数据库信息:\l[+] [ pattern ]
列出服务器中的数据库并且显示它们的名称、拥有者、字符集编码以及访问特权。如果指定了pattern,则只列出名称匹配该模式的数据库。如果向命令名称追加+,则还会显示数据库的尺寸、默认表空间以及描述(尺寸信息只对当前用户能连接的数据库可用)。
3、切换数据库: \c dbname
4、列出 schema:\dn[S+] [ pattern ]
如果指定了pattern,只列出名称匹配该模式的模式。默认情况下只会显示用户创建的对象,提供一个模式或者S修饰符可以把系统对象包括在内。如果向命令名称追加+,每个对象会与它相关的权限及描述(如果有)一起被列出。
5、 \dE[S+] [ pattern ]
\di[S+] [ pattern ]
\dm[S+] [ pattern ]
\ds[S+] [ pattern ]
\dt[S+] [ pattern ]
\dv[S+] [ pattern ]
在这一组命令中,字母E、i、m、s、t和v分别对应着外部表、索引、物化视图、序列、表和视图。你可以以任何顺序指定这些字母中的任意一个或者多个,这样可以得到这些类型的对象的列表。例如,\dit会列出索引和表。如果在命令名称后面追加+,则每一个对象的物理尺寸以及相关的描述也会被列出。如果指定了pattern,只列出名称匹配该模式的对象。默认情况下只会显示用户创建的对象,提供一个模式或者S修饰符可以把系统对象包括在内。
6、列出 schema下的表:\dt schema_name.*
包含一个点号(.)的模式被解释为一个 schema 名称模式后面跟上一个对象名称模式。例如,\dt foo*.*bar*会显示名称以foo开始的 schema 中所有名称包括bar的表。如果没有出现点号,那么模式将只匹配当前 schema 搜索路径中可见的对象。同样,双引号内的点号会失去其特殊含义并且变成普通的字符。
7、\! [ ***mand ]
如果没有参数,就跳出到一个子shell,当子shell退出时psql会继续。如果有一个参数,则执行shell命令***mand。
与大部分其他元命令不同,该行的所有剩余部分总是会被当做\!的参数,并且在参数中不会执行变量篡改以及反引号展开。该行的剩余部分会被简单地按字面传递给shell。
8、\q or \quit
退出psql程序。在一个脚本文件中,只有该脚本的执行会被终止。
postgresql copy命令介绍
1、copy命令导入导出数据为sql格式,可以只选部分列
postgresql=# COPY tb2persons(first_name,last_name,email) TO '/mnt/postgresql/weibo.sql';
2、导出到csv,用,分割,带表头
copy (select * from tablename limit 100) to '/data/wb_drive/LOG_STORAGE/exportdb/tablename.csv' DELIMITER ',' CSV HEADER;
3、批量导出
postgresql没有自带的批量导入导出成CSV的指令,但是有一个调用执行文件的指令(\i),这个指令可以执行编写的脚本。例如
一个a.txt文件,里面内容是
#将xxx表数据导出xxx文件
\copy xxx to xxx
需要在客户端的指令界面执行以下指令
\i 路径\a.txt
就可以进行批量导出操作。