首页 > 数据库 >PostgreSQL 基础知识:psql 提示和技巧

PostgreSQL 基础知识:psql 提示和技巧

时间:2023-05-06 09:01:18浏览次数:40  
标签:psql PostgreSQL postgres 数据库 基础知识 命令 pg

对于积极使用和连接到 PostgreSQL 数据库的任何开发人员或 DBA 来说,能够访问psql命令行工具是必不可少的。在我们的第一篇文章中,我们讨论了 psql的简要历史,并演示了如何在您选择的平台上安装它并连接到 PostgreSQL 数据库。

在本文中,我们将帮助您了解成为高级用户所需了解的所有psql基本知识 。从基本的命令语法到最常见(和最有用的)元命令,本文的其余部分都涵盖了这些内容。
要从本内容中获得最大价值,您应该已经 安装psql并连接到 PostgreSQL 数据库,以便您可以在阅读时尝试这些命令。

基本可用性提示


psql实用程序包含许多有用的命令,可帮助您探索和管理数据库。任何斜杠命令 ( \) 都用于指定一个元命令,该命令通常会在后台运行必要的 SQL 查询并以可读格式返回结果。

首先,让我们看一下有关 psql 作为命令行工具工作的一些技巧。了解如何启用某些功能或为每个元命令找到帮助,将有助于您更好的使用它。

01

 

分号是必需的


PostgreSQL 遵守 ANSI SQL 标准,该标准规定了语句终止是分号。在psql中可以通过添加分号并按 Enter 来表示 SQL 语句的结束。
如果不添加分号,psql将只提供一个新行供您继续输入,如下所示。

pagila_dev=# select * from film
pagila_dev-# ;

在添加分号之前不会执行查询。

02

 

命令历史和分页

psql是一个终端应用程序,因此它保留了您执行过的查询和命令的历史记录。因此,您可以使用键盘上的向上和向下箭头翻阅以前的命令和语句。当您想多次运行一条语句但每次只更改过滤条件时,这很有用。
历史记录存储在本地客户端的文件中,这意味着它会因计算机而异。您还可以配置.psqlrc文件中的变量HISTFILE为使用 psql的每个数据库或服务器创建不同的历史文件。
要查看已运行命令的列表,请使用 \s 命令。

postgres=# \s

\c pagila_
\c pagila_dev
\df
\x
\df
select * from film
;
\s

03

 

自动完成(补全)


psql支持基于选项卡的自动完成。对于许多命令,您可以使用TAB键来触发自动补全或给出建议。如果您想列出一个表或连接到一个不同的数据库,请从元命令开始,然后开始键入对象名称并按TAB。如果有多个匹配项,psql将提供类似于 Linux 终端的可能匹配项。

04

 

扩展的结果表格式


我很早就了解到的psql第一个有用的提示之一是:有两种模式可以同时显示查询和元命令结果。通常,psql将以等宽字体格式化数据的行和列,并在合理范围内进行适当的填充量以使所有内容对齐。但是,当发生终端换行时,要弄清楚哪些数据与哪一列对应可能会很困难。
在这些情况下,您可以以“扩展”(expanded)格式打印结果,该格式本质上是每行的交叉表,在左侧显示列标题,在右侧显示每个值。在这种格式中,您可以一次一个地翻阅结果。
您可以使用命令 \x打开和关闭扩展模式。下面我们展示了数据库中的对象列表,首先是普通表模式,然后是扩展模式。

postgres=# \d
                  List of relations
Schema |          Name           | Type  |  Owner
--------+-------------------------+-------+----------
public | example_tbl             | table | postgres
public | pg_stat_statements      | view  | postgres
public | pg_stat_statements_info | view  | postgres
(3 rows)

postgres=# \x
Expanded display is on.
postgres=# \d
List of relations
-[ RECORD 1 ]-------------------
Schema | public
Name   | example_tbl
Type   | table
Owner  | postgres
-[ RECORD 2 ]-------------------
Schema | public
Name   | pg_stat_statements
Type   | view
Owner  | postgres
-[ RECORD 3 ]-------------------
Schema | public
Name   | pg_stat_statements_info
Type   | view
Owner  | postgres

05

 

退出 psql 会话


最后,我不希望您觉得自己无法摆脱交互式外壳。任何时候你想退出当前psql会话,只需使用元命令 \q 返回到你的终端提示符。

postgres=# \q

ryan@redgate-laptop:~$

06

 

系统对象和其他详细信息

当我们回顾下面的一些基本命令时,您会注意到一种模式,其中许多命令具有多种形式。在许多命令的末尾添加大写字母S将在输出中包含系统对象。此外,在命令末尾包含符号“+”,将返回其他详细信息,类似于高级输出模式。
例如,下面的两个命令都列出了数据库的表、视图和序列,但第二种形式提供了额外的详细信息。
postgres=# \d
                  List of relations
Schema |          Name           | Type  |  Owner
--------+-------------------------+-------+----------
public | example_tbl             | table | postgres
public | pg_stat_statements      | view  | postgres
public | pg_stat_statements_info | view  | postgres
...

postgres=# \d+
                                              List of relations
Schema |          Name           | Type  |  Owner   | Persistence | Access method |    Size    | Description
--------+-------------------------+-------+----------+-------------+---------------+------------+-------------
public | example_tbl             | table | postgres | permanent   | heap          | 8192 bytes |
public | pg_stat_statements      | view  | postgres | permanent   |               | 0 bytes    |
public | pg_stat_statements_info | view  | postgres | permanent   |               | 0 bytes    |

postgres=# \dS+
                                               List of relations
   Schema   |              Name               | Type  |  Owner   | Persistence | Access method |    Size    | Description
------------+---------------------------------+-------+----------+-------------+---------------+------------+-------------
pg_catalog | pg_aggregate                    | table | postgres | permanent   | heap          | 56 kB      |
pg_catalog | pg_am                           | table | postgres | permanent   | heap          | 40 kB      |
pg_catalog | pg_amop                         | table | postgres | permanent   | heap          | 88 kB      |
pg_catalog | pg_amproc                       | table | postgres | permanent   | heap          | 72 kB      |
pg_catalog | pg_attrdef                      | table | postgres | permanent   | heap          | 8192 bytes |
...
public     | example_tbl                     | table | postgres | permanent   | heap          | 8192 bytes |
public     | pg_stat_statements              | view  | postgres | permanent   |               | 0 bytes    |
public     | pg_stat_statements_info         | view  | postgres | permanent   |               | 0 bytes    |

07

 

获得帮助

尽管输出可能会让人不知所措,但您始终可以查看psql帮助文件,该文件将向您展示元命令模式的扩展列表。请注意,输出被分组到类别中。

postgres=# \?
General
  \copyright             show PostgreSQL usage and distribution terms
  \crosstabview [COLUMNS] execute query and display result in crosstab
  \errverbose            show most recent error message at maximum verbosity
  \g [(OPTIONS)] [FILE]  execute query (and send result to file or |pipe);
                         \g with no arguments is equivalent to a semicolon
  \gdesc                 describe result of query, without executing it
  \gexec                 execute query, then execute each value in its result
  \gset [PREFIX]         execute query and store result in psql variables
  \gx [(OPTIONS)] [FILE] as \g, but forces expanded output mode
  \q                     quit psql
  \watch [SEC]           execute query every SEC seconds

Help
  \? [commands]          show help on backslash commands
  \? options             show help on psql command-line options
  \? variables           show help on special variables
  \h [NAME]              help on syntax of SQL commands, * for all commands

Query Buffer
  \e [FILE] [LINE]       edit the query buffer (or file) with external editor
  \ef [FUNCNAME [LINE]]  edit function definition with external editor
...

Informational
  (options: S = show system objects, + = additional detail)
  \d[S+]                 list tables, views, and sequences
  \d[S+]  NAME           describe table, view, sequence, or index
  \da[S]  [PATTERN]      list aggregates
  \dA[+]  [PATTERN]      list access methods

基本元命令


根据我过去几年使用 PostgreSQL 的经验,特别是多年的 SQL Server 工作经验,学习如何有效地使用psql基本命令已被证明是非常有用且节省时间的。以下是一组初始命令,可帮助您浏览 PostgreSQL 集群和数据库。
肯定有比这些更多的命令,但我相信这些是您应该从一开始就学习的高级命令集。

01

 

连接到不同的数据库

该\c命令将连接到同一服务器上的新数据库。如果您使用-W选项连接到服务器,那么每次您连接到不同的数据库时,系统都会再次提示您输入密码,这几乎总是很麻烦,所以我不推荐它。

postgres=# \c flywaytest

psql (15.0 (Ubuntu 15.0-1.pgdg20.04+1), server 15.1 (Debian 15.1-1.pgdg110+1))
You are now connected to database "flywaytest" as user "postgres".

flywaytest=#

请注意,默认psql提示显示当前连接的数据库名称。

02

 

列出所有数据库

\l命令将列出当前服务器中的所有数据库以及指定的访问权限。看到数据库存在于此列表中并不意味着当前角色可以连接 ( \c) 到数据库。添加符号“+”将提供其他信息,包括数据库大小。、

postgres=# \l+
                                                    List of databases
       Name        |  Owner   | Encoding |  Collate   |   Ctype    | ICU Locale | Locale Provider |   Access privileges
-------------------+----------+----------+------------+------------+------------+-----------------+-----------------------
advent_of_code    | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | postgres=CTc/postgres+
                   |          |          |            |            |            |                 | rptusr=c/postgres
bulk_example      | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            |
flywaytest        | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            |
flywaytest_shadow | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            |

显示对象详细信息


psql里面有很多\d命令。尽管大多数命令没有指定具体名称,但社区中的大多数人将其称为“描述”、“显示”或“详细信息”命令。就像一个 CLI,它允许您通过键入“help [command]”之类的内容来获取每个命令的帮助。
大多数\d命令将通过在末尾添加+运算符,来提供更多详细信息。我只会在下面展示几个示例,但请随意尝试使用这些命令中的任何一个来获取更多详细信息。

01

 

显示表、视图和序列对象


\d命令的默认操作是列出当前数据库中的所有表、视图和序列。

postgres=# \d
                  List of relations
Schema |          Name           | Type  |  Owner
--------+-------------------------+-------+----------
public | example_tbl             | table | postgres
public | pg_stat_statements      | view  | postgres
public | pg_stat_statements_info | view  | postgres

02

 

述表、视图或序列的详细信息

您可以命名特定对象以获取更多信息。使用+运算符还将列出表的约束和索引。

postgres=# \d+ example_tbl
                                       Table "public.example_tbl"
Column |  Type   | Collation | Nullable | Default | Storage  | Compression | Stats target | Description
--------+---------+-----------+----------+---------+----------+-------------+--------------+-------------
id     | integer |           | not null |         | plain    |             |              |
notes  | text    |           |          |         | extended |             |              |
Indexes:
    "idx_example_notes" btree (notes)
Access method: heap

03

 

显示特定对象类型

如您所料,psql开发人员提供了用于列出各个对象类型的特定命令。在命令后添加不同的字母\d将仅列出该类型的对象。所有列表都支持使用+运算符。.

1、E = 外部表(由许多外部数据包装器之一提供)
2、I = 索引
3、m = 物化视图
4、s = 序列
5、t = 表格
6、v = 视图

postgres=# \dt

            List of relations
 Schema |    Name     | Type  |  Owner
--------+-------------+-------+----------
 public | example_tbl | table | postgres

04

 

显示角色和成员

角色用于连接到 PostgreSQL、分配数据库权限和指定对象所有权。有关角色的更多详细信息,请参阅我们关于 PostgreSQL 安全性的系列文章。

postgres=# \du
                                        List of roles
Role name |                         Attributes                         |     Member of
-----------+------------------------------------------------------------+---------------
dev1      |                                                            | {devgrp}
dev2      |                                                            | {devgrp}
devgrp    | Cannot login                                               | {}
postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
read_only | Cannot login                                               | {pg_read_all_data}
rptusr    |                                                            | {}

05

 

显示已安装的扩展

扩展是 PostgreSQL 更强大的特性之一。了解特定数据库中安装了哪些扩展有助于您更好地了解应用程序可能依赖的功能。

postgres=# \dx
                                            List of installed extensions
        Name        | Version |   Schema   |                              Description
--------------------+---------+------------+------------------------------------------------------------------------
pg_stat_statements | 1.10    | public     | track planning and execution statistics of all SQL statements executed
plpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language
tablefunc          | 1.0     | public     | functions that manipulate whole tables, including crosstab                                                          | {}

06

 

显示模式


通常,您的应用程序数据库将具有多少模式,具体取决于数据库的设计和访问要求。默认情况下,psql只会显示属于您的模式,它由变量search_path标识,对于大多数用户而言,public作为默认的模式。如果您想查看数据库中还有哪些其他模式可用,\dn将仅显示用户自定义的模式。
 
postgres=# \dn
       List of schemas
   Name   |       Owner
----------+-------------------
accounts | postgres
public   | pg_database_owner

07

 

显示用户定义的函数

PostgreSQL 是一个功能繁重的数据库。如果您来自其他数据库(如 SQL Server),这可能会感觉有点违反直觉,因为很多讨论和培训都在谈论使用函数的陷阱,尤其是在查询性能方面。也就是说,能够快速列出当前数据库中的各种函数(包括输入类型)非常有帮助。

postgres=# \df
                                                         List of functions
Schema |            Name            | Result data type |                        Argument data types                         | Type
--------+----------------------------+------------------+--------------------------------------------------------------------+------
public | _group_concat              | text             | text, text                                                         | func
public | film_in_stock              | SETOF integer    | p_film_id integer, p_store_id integer, OUT p_film_count integer    | func
public | film_not_in_stock          | SETOF integer    | p_film_id integer, p_store_id integer, OUT p_film_count integer    | func
public | get_customer_balance       | numeric          | p_customer_id integer, p_effective_date timestamp with time zone   | func
public | inventory_held_by_customer | integer          | p_inventory_id integer                                             | func
public | inventory_in_stock         | boolean          | p_inventory_id integer                                             | func
public | last_day                   | date             | timestamp with time zone                                           | func
public | rewards_report             | SETOF customer   | min_monthly_purchases integer, min_dollar_amount_purchased numeric | func

08

 

在终端外编辑 SQL


大部分时间psql被用作交互式终端。然而,有时,在编辑器中打开一个查询以进行更大的更改和迭代是很有用的。
使用该\e命令会将当前查询缓冲区(或最近执行的命令)打开到编辑器中。退出编辑器后,如果 SQL 查询完成(以分号结束),它将立即执行。
或者,在命令\e后添加文件名,将打开该文件进行编辑,然后在完成时执行查询。(例如。\e my_query.sql)
最后,您可以使用特定版本的编辑命令在外部编辑器中查看函数或视图的代码。

\ef {function name}
\ev {view name}

09

 

显示隐藏的元命令 SQL


当您了解有关psql交互式 shell 的更多信息时,最后要知道的一件事是,可以查看运行的每个元命令的 SQL 查询。这是了解运行 PostgreSQL 实例的目录表更多信息的一种非常有用的方法。注意,通常会执行多个 SQL 查询以获得所需的输出,因此在您尝试了解特定内容时,仅在短时间内启用它通常很有帮助。
在psql.有两个选项方法可以启用这个模式:

选项一:psql -E 连接参数


这将在您的psql连接期间启用隐藏查询。

psql -E postgresql://[username]:[password]@[hostname]:[port]/[database name]

选项 2:\set 元命令

如果您已经连接到数据库,则可以随意设置显示隐藏查询的变量。

postgres=# \set ECHO_HIDDEN true

结论

了解如何安装和使用psql命令行工具是使用 PostgreSQL 的必备技能。由于没有完全标准化的 IDE,从目录表中轻松查询有关数据库的详细信息有时可能具有挑战性,特别是如果您是 PostgreSQL 的新手。了解基本元命令的工作原理可以显着改善您的开发和管理任务。

标签:psql,PostgreSQL,postgres,数据库,基础知识,命令,pg
From: https://www.cnblogs.com/chuangsi/p/17375895.html

相关文章

  • Flask - 基础知识入门解析
    Flask-基础知识入门解析框架比较Djangoweb框架:优点-组件非常全,教科书框架,adminmodel-ORMsession缺点-资源浪费,因为组件多,大,还是互相关联的,随便卸载组件,可能会造成项目的崩溃Flaskweb框架:优点-扩展性强,精简,简单,第三方组件丰富sessionFlask-SessionFlask-Adm......
  • PostgreSQL 12 文档: PostgreSQL 客户端工具
    PostgreSQL客户端应用这部份包含PostgreSQL客户端应用和工具的参考信息。不是所有这些命令都是通用工具,某些需要特殊权限。这些应用的共同特征是它们可以被运行在任何主机上,而不管数据库服务器在哪里。当在命令行上指定用户和数据库名时,它们的大小写会被保留—空格或特殊字......
  • PostgreSQL 12 文档: PostgreSQL 服务端程序
    PostgreSQL服务器应用这一部分包含PostgreSQL服务器应用和支持工具的参考信息。这些命令只在数据库服务器所在的主机上运行才有用。其他工具程序在PostgreSQL客户端应用中列出。目录initdb —创建一个新的PostgreSQL数据库集簇pg_archivecleanup —清理PostgreSQL WAL......
  • 矩阵基础知识
    文章目录1.矩阵的一些基础知识1.1矩阵只有乘法1.2向量有点乘(也是内积)和叉乘:1.3单位向量1.4正交矩阵1.5线性无关和线性相关的向量1.6矩阵的逆1.7对称矩阵1.7矩阵的秩(rank)1.8伴随矩阵1.9矩阵的零空间1.10矩阵的扩展基定理1.矩阵的一些基础知识1.1矩阵只有乘法1.2向量......
  • PostgreSQL 生成随机整数
    首先random()函数用于生成0-1之间的随机数postgres=#SELECTrandom()asrand;rand--------------------0.6296923727161818(1row)取整函数有ceil()floor()trunc()postgres=#SELECTceil(1.5)asceil,floor(1.5)asfloor,trunc(1.5)astrunc;ceil|fl......
  • PostgreSQL 12 文档: 部分 I. 教程
    部分 I. 教程欢迎来到PostgreSQL教程。下面的几章将为那些新接触PostgreSQL、关系数据库概念和SQL语言的读者给出一个简单介绍。我们只假定读者拥有关于如何使用计算机的一般知识。读者不需要特殊的Unix或编程经验。这一部分主要希望给你一些关于PostgreSQL系统的重要方面......
  • PostgreSQL 执行计划
    查询计划扫描结点顺序扫描索引扫描只用索引的扫描位图堆扫描位图索引扫描公共表表达式的扫描自定义扫描外表扫描函数结果扫描子查询扫描表样本扫描行地址扫描行集合扫描工作表扫描连接结点哈希连接合并连接嵌套连接物化结点聚合位图与位图或分组......
  • postgresql有进程链接数据时删除数据库
    selectpg_terminate_backend(pg_stat_activity.pid)frompg_stat_activitywheredatname='数据库名称'andpid<>pg_backend_pid();命令解释:pg_terminate_backend:用来终止与数据库的连接的进程id的函数。pg_stat_activity:是一个系统表,用于存储服务进程的属性和状态。pg_......
  • golang基础知识
    一golang基础知识Go(又称Golang)是Google的RobertGriesemer,RobPike及KenThompson开发的一种计算机编程语言语言。设计初衷Go语言是谷歌推出的一种的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(RobPike)说:我们之所以开发......
  • 基于centos release 7.9.2009的LINUX基础知识
    以下是一些你需要了解的基本命令:ls:列出当前目录下的文件和文件夹。cd:改变当前目录。mkdir:创建新的文件夹。rm:删除文件或文件夹。vi:打开一个文本编辑器。接下来,我们将讨论一些重要的运维任务和相应的命令:安装软件包yuminstall<package-name>:使用yum命令来安装软件包......