精华内容
下载资源
问答
  • psql流 将结果流式传输到stdout的psql-esque CLI 安装 使用全局安装: $ npm install psql-stream -g 用法 Usage: psql-stream [options] psql-esque CLI that streams results to stdout Options: -c, --command ...
  • pg_dump: pg_dump -a -t tbl_test "host=127.0.0.1 hostaddr=...psql: psql --command "select * from tbl_test;" "host=127.0.0.1 hostaddr=127.0.0.1 port=5432 user=postgres password=123456 dbname=postgres
  • 本软件是SQL2000四合一,里面有企业版、个人版、标准版、开发版四种版本的一个镜像,全是中文的哦,喜欢的朋友可以下载
  • NULL 博文链接:https://rainbow702.iteye.com/blog/2086041
  • psql 中, \H -- html mode \o test . html select * from mytable; -- or any other query. \o -- so that it no longer prints to file \H -- disable html mode 在外壳中, make_pretty_table.sh test.html...
  • 项目常用psql代码

    2020-12-14 18:55:51
    /home/pgadmin/psql shufu -U pgadmin \dt 查看表:display table \d 查看表结构 \q 退出数据库 quit \c 切换数据库 2 数据类型 varchar int(long) numeric date(timestamp) 3 数据库操作 3.0 模式 //建模式 ...
  • psql2csv:在psql中运行查询并将结果输出为CSV
  • python实现psql数据库备份还原(两种方法),有详细的说明文档以及操作信息,自己花时间写的,很适合新手查看,每一步都有注释以及说明,谢谢,如有问题,请私信我.
  • % csv2psql --schema=public --key=student_id,class_id example/enrolled.csv > enrolled.sql % psql -f enrolled.sql 将 CSV 文件转换为 PostgreSQL 表。 Usage: csv2psql [options] ( input.csv | - ) ...
  • dbf2psql-开源

    2021-07-01 03:44:15
    将 xbase 文件转换为 postrgres 表的实用程序。
  • psql 13 64位

    2019-01-04 15:26:35
    官方版本,使用很不错。请各位老板下载。
  • psql-native 该库是 postgres 客户端协议 3.0 版的实现,其支持从 PostgreSQL 7.4 及更高版本开始。 图书馆的目标是: 使用尽可能少的资源。 尽可能减少复制数据。 使用 vibe.d 套接字支持异步 I/O。 该库仍在...
  • SQL2000PSQL2K_4IN1

    2015-12-29 14:41:44
    SQL2000PSQL2K_4IN1 内涵百度云下载地址和win7安装成功步骤 如果连接坏掉了来戳我
  • psql常用命令

    2018-07-06 16:00:42
    目前postgresql作为最流行、最先进的开源数据库之一,在企业中现在非常流行,所以掌握postgresql也是IT人员的基本功之一
  • lib-postgresql 支持Postgresql的库 图式 安装: cd <yourproject>-postgresql ../lib-postgresql/schema/install 然后git commit和push。 这将创建一个提供审计,日志和util名称空间SQL脚本。...
  • psql基础资料

    2016-10-03 17:17:55
  • psql_odbc.zip

    2019-12-18 02:48:33
    Windows上建立数据源的步骤:控制面板--管理工具--数据源(ODBC)--文件DNS--追加,选择PostgreSQL Unicode,下一步,起个文件名,完成即可。值得注意的是,程序中的Driver也得是PostgreSQL Unicode。...
  • psql的备用输出格式

    2020-08-11 16:09:32
    本文翻译自:Alternate output format for psql I am using PostgreSQL 8.4 on Ubuntu. 我在Ubuntu上使用PostgreSQL 8.4。 I have a table with columns c1 through cN . 我有一个表,其中的列c1到cN 。 The columns...

    本文翻译自:Alternate output format for psql

    I am using PostgreSQL 8.4 on Ubuntu. 我在Ubuntu上使用PostgreSQL 8.4。 I have a table with columns c1 through cN . 我有一个表,其中的列c1cN The columns are wide enough that selecting all columns causes a row of query results to wrap multiple times. 列足够宽,选择所有列都会导致一行查询结果多次包装。 Consequently, the output is hard to read. 因此,输出难以读取。

    When the query results constitute just a few rows, it would be convenient if I could view the query results such that each column of each row is on a separate line, eg 当查询结果仅占几行时,如果我可以查看查询结果以使每一行的每一列都位于单独的行(例如,

     c1: <value of row 1's c1>
     c2: <value of row 1's c1>
     ...
     cN: <value of row 1's cN>
     ---- some kind of delimiter ----
     c1: <value of row 2's c1>
     etc.
    

    I am running these queries on a server where I would prefer not to install any additional software. 我在不希望安装任何其他软件的服务器上运行这些查询。 Is there a psql setting that will let me do something like that? 是否有一个psql设置可以让我做类似的事情?


    #1楼

    参考:https://stackoom.com/question/EiCT/psql的备用输出格式


    #2楼

    Also be sure to check out \\H, which toggles HTML output on/off. 另外,请务必检查出\\ H,它会打开/关闭HTML输出。 Not necessarily easy to read at the console, but interesting for dumping into a file (see \\o) or pasting into an editor/browser window for viewing, especially with multiple rows of relatively complex data. 在控制台上不一定很容易阅读,但是对于转储到文件中(请参见\\ o)或粘贴到编辑器/浏览器窗口中进行查看(特别是包含多行相对复杂的数据)尤其有趣。


    #3楼

    (New) Expanded Auto Mode: \\x auto (新)扩展的自动模式:\\ x自动

    New for Postgresql 9.2; Postgresql 9.2的新增功能; PSQL automatically fits records to the width of the screen. PSQL自动使记录适合屏幕的宽度。 previously you only had expanded mode on or off and had to switch between the modes as necessary. 以前,您只能打开或关闭扩展模式,并且必须根据需要在模式之间进行切换。

    • If the record can fit into the width of the screen; 记录是否适合屏幕宽度; psql uses normal formatting. psql使用常规格式。
    • If the record can not fit into the width of the screen; 如果记录适合屏幕的宽度; psql uses expanded mode. psql使用扩展模式。

    To get this use: \\x auto 要使用此功能: \\ x auto

    Postgresql 9.5 Documentation on PSQL command. PostgreSQL 9.5有关PSQL命令的文档。


    Wide screen, normal formatting: 宽屏,正常格式:

     id | time  |       humanize_time             | value 
    ----+-------+---------------------------------+-------
      1 | 09:30 |  Early Morning - (9.30 am)      |   570
      2 | 11:30 |  Late Morning - (11.30 am)      |   690
      3 | 13:30 |  Early Afternoon - (1.30pm)     |   810
      4 | 15:30 |  Late Afternoon - (3.30 pm)     |   930
    (4 rows)
    

    Narrow screen, expanded formatting: 窄屏,扩展格式:

    -[ RECORD 1 ]-+---------------------------
    id            | 1
    time          | 09:30
    humanize_time | Early Morning - (9.30 am)
    value         | 570
    -[ RECORD 2 ]-+---------------------------
    id            | 2
    time          | 11:30
    humanize_time | Late Morning - (11.30 am)
    value         | 690
    -[ RECORD 3 ]-+---------------------------
    id            | 3
    time          | 13:30
    humanize_time | Early Afternoon - (1.30pm)
    value         | 810
    -[ RECORD 4 ]-+---------------------------
    id            | 4
    time          | 15:30
    humanize_time | Late Afternoon - (3.30 pm)
    value         | 930
    

    How to start psql with \\x auto? 如何使用\\ x auto启动psql?

    Configure \\x auto command on startup by adding it to .psqlrc in your home folder and restarting psql. 通过将\\x auto命令添加到主文件夹中的.psqlrc并重新启动psql,在启动时配置\\x auto命令。 Look under 'Files' section in the psql doc for more info . 在psql doc中的“文件”部分下查找更多信息

    ~/.psqlrc 〜/ .psqlrc

    \x auto
    

    #4楼

    You have so many choices, how could you be confused :-)? 您有很多选择,您怎么会困惑:-)? The main controls are: 主要控件是:

    # \pset format
    # \H
    # \x
    # \pset pager off
    

    Each has options and interactions with the others. 每个人都有选择和与其他人的互动。 The most automatic options are: 最自动的选项是:

    # \x off;\pset format wrapped
    # \x auto
    

    The newer "\\x auto" option switches to line-by-line display only "if needed". 较新的“ \\ x自动”选项仅在“需要时”切换到逐行显示。

    -[ RECORD 1 ]---------------
    id          | 6
    description | This is a gallery of oilve oil brands.
    authority   | I love olive oil, and wanted to create a place for
    reviews and comments on various types.
    -[ RECORD 2 ]---------------
    id          | 19
    description | XXX Test A 
    authority   | Testing
    

    The older "\\pset format wrapped" is similar in that it tries to fit the data neatly on screen, but falls back to unaligned if the headers won't fit. 较旧的“ \\ pset包装格式”与之类似,因为它试图将数据整齐地显示在屏幕上,但是如果标题不适合,则会退回到未对齐状态。 Here's an example of wrapped: 这是包装的示例:

     id |          description           |            authority            
    ----+--------------------------------+---------------------------------
      6 | This is a gallery of oilve     | I love olive oil, and wanted to
        ; oil brands.                    ;  create a place for reviews and
        ;                                ;  comments on various types.
     19 | Test Test A                    | Testing
    

    #5楼

    One interesting thing is we can view the tables horizontally, without folding. 一件有趣的事情是我们可以水平查看桌子,而无需折叠。 we can use PAGER environment variable. 我们可以使用PAGER环境变量。 psql makes use of it. psql使用它。 you can set 你可以设置

    export PAGER='/usr/bin/less -S'
    

    or just less -S if its already availble in command line, if not with the proper location. 如果在命令行中已经可用,则使用less -Sless -S (如果没有正确的位置)。 -S to view unfolded lines. -S查看展开的线。 you can pass in any custom viewer or other options with it. 您可以将任何自定义查看器或其他选项传递给它。

    I've written more in Psql Horizontal Display 我在Psql水平显示中写了更多


    #6楼

    you can use the zenity to displays the query output as html table. 您可以使用zenity将查询输出显示为html表。

    • first implement bash script with following code: 首先用以下代码实现bash脚本:

      cat > '/tmp/sql.op'; cat>'/tmp/sql.op'; zenity --text-info --html --filename='/tmp/sql.op'; zenity --text-info --html --filename ='/ tmp / sql.op';

      save it like mypager.sh mypager.sh一样保存

    • Then export the environment variable PAGER by set full path of the script as value. 然后通过将脚本的完整路径设置为值来导出环境变量PAGER。

      for example:- export PAGER='/path/mypager.sh' 例如: -export PAGER ='/ path / mypager.sh'

    • Then login to the psql program then execute the command \\H 然后登录到psql程序,然后执行命令\\ H

    • And finally execute any query,the tabled output will displayed in the zenity in html table format. 最后执行任何查询,表格输出将以zenity格式以html表格格式显示。

    展开全文
  • PostgreSQL 命令行客户端 psql 使用指南

    千次阅读 2020-08-27 22:08:19
    psql 是 PostgreSQL 官方提供的命令行客户端工具,支持交互式的查询和脚本命令。同时,psql 还提供了大量的元命令(meta-command)以及许多类似 shell 的功能,可以方便我们编写脚本和实现各种任务的自动化。本文...

    psql

    大家好,我是只谈技术不剪发的 Tony 老师。

    psql 是 PostgreSQL 官方提供的命令行客户端工具,支持交互式的查询和脚本命令。同时,psql 还提供了大量的元命令(meta-command)以及许多类似 shell 的功能,可以方便我们编写脚本和实现各种任务的自动化。

    无论是 DBA 还是开发人员,psql 都是和 PostgreSQL 数据库交互必不可少的工具之一;因此,本文就来详细介绍一下它的使用方法和常用命令。如果你点击了收藏,不要忘了关注❤️、评论📝、点赞👍

    运行 psql 工具

    简单来说,运行 psql 工具的命令如下:

    psql [option...] [dbname [username]]
    

    其中,option 用于指定各种命令行选项,下文将会详细进行介绍;dbname 是连接的数据库名;username 是连接数据库的用户名。

    执行psql -?或者psql --help命令可以获取运行 psql 工具的帮助:

    [tony@sqlhost ~]> psql --help
    psql is the PostgreSQL interactive terminal.
    
    Usage:
      psql [OPTION]... [DBNAME [USERNAME]]
    
    General options:
      -c, --command=COMMAND    run only single command (SQL or internal) and exit
      -d, --dbname=DBNAME      database name to connect to (default: "tony")
      -f, --file=FILENAME      execute commands 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=commands      list backslash commands, 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 commands
      -e, --echo-queries       echo commands sent to server
      -E, --echo-hidden        display queries that internal commands generate
      -L, --log-file=FILENAME  send session log to file
      -n, --no-readline        disable enhanced command 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 command)
    
    Output format options:
      -A, --no-align           unaligned table output mode
          --csv                CSV (Comma-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 command)
      -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: "tony")
      -w, --no-password        never prompt for password
      -W, --password           force password prompt (should happen automatically)
    
    For more information, type "\?" (for internal commands) or "\help" (for SQL
    commands) from within psql, or consult the psql section in the PostgreSQL
    documentation.
    
    Report bugs to <pgsql-bugs@lists.postgresql.org>.
    

    接下来我们详细介绍一下这些选项的作用。

    连接数据库

    使用 psql 连接 PostgreSQL 数据库的选项如下:

    • -h hostname或者--host=hostname,数据库服务器主机地址或者本机 socket 目录,默认为 local socket 或者 localhost;
    • -p port或者--port=port,数据库服务的监听端口,默认为 5432;
    • -U username或者--username=username,数据库用户名,默认为操作系统当前用户;
    • -w或者--no-password,不提示输入密码,如果没有提供其他认证方式(例如 .pgpass 文件)可能会连接失败。通常用于执行批处理任务和脚本;
    • -W或者--password,强制提示输入密码,如果服务器要求密码认证,即使不指定该参数也会提示输入密码;
    • -d dbname或者--dbname=dbname,连接的数据库,默认和用户名相同。该参数等价于 psql 命令后第一个非选项形式的参数 dbname。

    例如,以下命令使用 postgres 用户连接到主机 192.168.56.104、端口 5432 的 hrdb 数据库:

    [tony@sqlhost ~]> psql -h 192.168.56.104 -p 5432 -U postgres hrdb
    Password for user postgres: 
    psql (12.4)
    Type "help" for help.
    
    hrdb=# 
    

    以下命令使用操作系统用户(postgres)通过 Unix 套接字连接到本机上的 postgres 数据库:

    -bash-4.2$ whoami
    postgres
    -bash-4.2$ psql
    psql (12.4)
    Type "help" for help.
    
    postgres=# 
    

    另一种指定连接参数的方法是使用 conninfo 字符串或者 URI 替代数据库名。例如:

    [tony@sqlhost ~]> psql "host=192.168.56.104 user=tony password=tony port=5432 dbname=hrdb"
    psql (12.4)
    Type "help" for help.
    
    hrdb=> \q
    
    [tony@sqlhost ~]> psql postgresql://192.168.56.104:5432/hrdb?user=tony
    Password for user tony: 
    psql (12.4)
    Type "help" for help.
    
    hrdb=> 
    

    查看当前连接信息

    成功建立连接之后,可以使用元命令\conninfo查看当前连接信息:

    hrdb=> \conninfo
    You are connected to database "hrdb" as user "tony" on host "192.168.56.104" at port "5432".
    

    切换数据库连接

    使用元命令\c可以重新连接数据库:

    \c[onnect] [ dbname [ username ] [ host ] [ port ] | conninfo ]
    

    以上参数如果省略,将会重用原有连接的参数值。例如:

    hrdb=> \c
    You are now connected to database "hrdb" as user "tony".
    hrdb=> \c postgres
    You are now connected to database "postgres" as user "tony".
    postgres=> 
    

    第一个 \c 命令使用原来的连接参数重新建立了连接;第二个 \c 命令使用原来的用户(tony)切换到了 postgres 数据库。

    查看/设置客户端编码

    通过\encoding [ENCODING]命令可以查看或者设置客户端的编码格式。例如:

    hrdb=> \encoding
    UTF8
    
    hrdb=> \encoding gbk
    hrdb=> \encoding
    GBK
    

    修改用户密码

    使用\password [username]命令可以安全地修改指定用户的密码,默认为修改当前用户密码。例如:

    hrdb=> \password
    Enter new password: 
    Enter it again: 
    hrdb=> 
    

    查看帮助信息

    psql 提供了关于该工具的命令、选项、变量配置以及 SQL 语句的帮助信息。

    psql 命令帮助

    使用\?或者\? commands命令可以获得所有反斜线命令的帮助:

    hrdb=> \?
    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 verbosity
      \g [FILE] or ;         execute query (and send results to file or |pipe)
      \gdesc                 describe result of query, without executing it
      \gexec                 execute query, then execute each value in its result
      \gset [PREFIX]         execute query and store results in psql variables
      \gx [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
    ...
    

    该命令的结果和psql --help=commands的输出相同。

    psql 命令行选项帮助

    输入\? options命令可以获得运行 psql 时的命令行选项相关的帮助:

    hrdb=> \? options
    psql is the PostgreSQL interactive terminal.
    
    Usage:
      psql [OPTION]... [DBNAME [USERNAME]]
    
    General options:
      -c, --command=COMMAND    run only single command (SQL or internal) and exit
      -d, --dbname=DBNAME      database name to connect to (default: "tony")
      -f, --file=FILENAME      execute commands 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=commands      list backslash commands, then exit
          --help=variables     list special variables, then exit
    ...
    

    该命令的结果和上文中的psql -?或者psql --help的输出相同。

    psql 配置变量帮助

    输入\? variables命令可以获得 psql 的配置变量、环境变量以及显示设置相关的帮助信息:

    hrdb=> \? variables
    List of specially treated variables
    
    psql variables:
    Usage:
      psql --set=NAME=VALUE
      or \set NAME VALUE inside psql
    
      AUTOCOMMIT
        if set, successful SQL commands are automatically committed
      COMP_KEYWORD_CASE
        determines the case used to complete SQL key words
        [lower, upper, preserve-lower, preserve-upper]
      DBNAME
        the currently connected database name
      ECHO
        controls what input is written to standard output
        [all, errors, none, queries]
      ECHO_HIDDEN
        if set, display internal queries executed by backslash commands;
        if set to "noexec", just show them without execution
      ENCODING
        current client character set encoding
      ERROR
        true if last query failed, else false
      FETCH_COUNT
        the number of result rows to fetch and display at a time (0 = unlimited)
      ...
    

    该命令的结果和psql --help=variables的输出相同。

    SQL 语句帮助

    输入\h [ command ]或者\help [ command ]命令可以获得 SQL 命令语法相关的帮助:

    hrdb=> \h
    Available help:
      ABORT                            CREATE FOREIGN DATA WRAPPER      DROP ROUTINE
      ALTER AGGREGATE                  CREATE FOREIGN TABLE             DROP RULE
      ALTER COLLATION                  CREATE FUNCTION                  DROP SCHEMA
      ALTER CONVERSION                 CREATE GROUP                     DROP SEQUENCE
      ALTER DATABASE                   CREATE INDEX                     DROP SERVER
      ALTER DEFAULT PRIVILEGES         CREATE LANGUAGE                  DROP STATISTICS
      ...
    

    或者直接查看某个具体 SQL 命令的语法帮助,例如:

    hrdb=> \h create index
    Command:     CREATE INDEX
    Description: define a new index
    Syntax:
    CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON [ ONLY ] table_name [ USING method ]
        ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
        [ INCLUDE ( column_name [, ...] ) ]
        [ WITH ( storage_parameter [= value] [, ... ] ) ]
        [ TABLESPACE tablespace_name ]
        [ WHERE predicate ]
    
    URL: https://www.postgresql.org/docs/12/sql-createindex.html
    

    退出 psql 工具

    退出 psql 终端的命令包括\q\quitquit以及exit。例如:

    hrdb=> \q
    [tony@sqlhost ~]> 
    

    常用元命令

    执行 SQL 语句

    psql 中的 SQL 命令以;或者\g结束,同时发送到服务端执行并返回结果。例如,以下查询返回了当前 PostgreSQL 数据库的版本:

    hrdb=> SELECT version();
                                                     version                                                 
    ---------------------------------------------------------------------------------------------------------
     PostgreSQL 12.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
    (1 row)
    

    保存查询结果

    如果想要将查询结果直接保存到某个文件中,可以使用\g filename命令。例如:

    hrdb=> SELECT version() \g result.txt
    hrdb=> \! ls
    result.txt
    

    此时,数据库的版本信息被保存到了操作系统当前工作目录下的 result.txt 文件中。\! command用于执行操作系统命令,这里使用 Linux 的 ls 命令查看文件列表。

    另外,执行\o [ filename ]命令可以将之后的所有查询结果和命令返回信息保存到指定文件,默认为标准输出。例如:

    hrdb=> \o result.txt
    hrdb=> select user;
    hrdb=> select version();
    hrdb=> \o
    hrdb=> select user;
     user 
    ------
     tony
    (1 row)
    

    前两个 select 语句的结果打印到了 result.txt 文件中,然后又将查询结果定向为标准输出。

    还有一个\copy ...命令可以用于将表或者查询结果保存到指定文件中,或者从指定文件中读取内容到表中。例如:

    hrdb=> \copy employee to employee.txt
    COPY 25
    

    重复执行语句

    \watch [SEC]命令可以用于每隔指定秒数(默认 2 秒)执行一次 SQL 语句。例如:

    hrdb=> SELECT now() \watch 5
    Wed 26 Aug 2020 01:44:44 AM CST (every 5s)
    
                 now              
    ------------------------------
     2020-08-26 01:44:44.64684+08
    (1 row)
    
    Wed 26 Aug 2020 01:44:49 AM CST (every 5s)
    
                  now              
    -------------------------------
     2020-08-26 01:44:49.655722+08
    (1 row)
    
    Wed 26 Aug 2020 01:44:54 AM CST (every 5s)
    
                  now              
    -------------------------------
     2020-08-26 01:44:54.676536+08
    (1 row)
    
    

    显示/清空查询缓冲区

    输入\p命令可以显示当前缓冲区或者最近一次执行的命令:

    hrdb=> \p
    SELECT version()
    

    输入\r命令可以清空当前缓冲区中的内容:

    hrdb=> \r
    Query buffer reset (cleared).
    

    编辑/保存查询缓冲区

    元命令\e [FILE] [LINE]可以用于编辑当前查询缓冲区或者文件中的内容。例如:

    hrdb=> \e
    

    Linux 默认使用 vim 作为外部编辑器,Windows 默认使用 Notepad 作为外部编辑器。

    在这里插入图片描述
    编辑完成后所有的内容都会复制到查询缓冲区,如果命令中包含 ; 或者 \g,psql 会自动执行该命令。

     ?column? 
    ----------
            2
    (1 row)
    

    元命令\w filename可以将当前查询缓冲区中的内容保存到文件中:

    hrdb=> \w command.txt
    

    执行上一次命令

    直接输入没有参数的\g命令表示再次执行查询缓冲区中的命令或者上一次执行的语句。例如:

    hrdb=> SELECT 1;
     ?column? 
    ----------
            1
    (1 row)
    
    hrdb=> \g
     ?column? 
    ----------
            1
    (1 row)
    

    查看/保存命令历史

    \s [ filename ]命令用于将历史命令保存到文件中,如果省略 filename 则显示到终端。例如:

    hrdb=> \s
    SELECT version() \g result.txt
    \! ls
    SELECT now() \watch
    \watch
    \s
    SELECT now() \watch 5
    \timing on
    select count(*) from employee;
    \timing
    SELECT 1;
    \g
    \s
    

    显示语句执行时间

    \timing [ on | off ]命令可以用于显示或者关闭 SQL 语句的执行时间,单位为毫秒。例如:

    hrdb=> \timing on
    Timing is on.
    hrdb=> select count(*) from employee;
     count 
    -------
        25
    (1 row)
    
    Time: 23.220 ms
    hrdb=> \timing
    Timing is off.
    

    不指定参数的\timing命令可以在 on 和 off 之间切换。

    设置输出格式

    \pset [ option [ value ] ]命令可以用于显示或者设置与查询结果输出相关的选项。例如:

    hrdb=> \pset
    border                   1
    columns                  0
    csv_fieldsep             ','
    expanded                 off
    fieldsep                 '|'
    fieldsep_zero            off
    footer                   on
    format                   aligned
    linestyle                ascii
    null                     ''
    numericlocale            off
    pager                    1
    pager_min_lines          0
    recordsep                '\n'
    recordsep_zero           off
    tableattr                
    title                    
    tuples_only              off
    unicode_border_linestyle single
    unicode_column_linestyle single
    unicode_header_linestyle single
    

    以上命令返回了当前的选项设置。

    我们以 null 选项为例,默认情况下 psql 的输出结果中无法区分空字符串和 NULL 值,我们可以使用\pset null str命令将 NULL 值显示为指定的字符串:

    hrdb=> select null as null_value,'' as empty_string;
     null_value | empty_string 
    ------------+--------------
                | 
    (1 row)
    
    hrdb=> select null as null_value,'' as empty_string;
     null_value | empty_string 
    ------------+--------------
     [null]     | 
    (1 row)
    

    一些选项还提供了便捷的元命令,例如\x命令\pset expanded on|off命令都可以打开或者关闭扩展表格模式。例如:

    hrdb=> \x
    Expanded display is on.
    hrdb=> select emp_id, emp_name, hire_date from employee limit 3;
    -[ RECORD 1 ]---------
    emp_id    | 1
    emp_name  | 刘备
    hire_date | 2000-01-01
    -[ RECORD 2 ]---------
    emp_id    | 4
    emp_name  | 诸葛亮
    hire_date | 2006-03-15
    -[ RECORD 3 ]---------
    emp_id    | 5
    emp_name  | 黄忠
    hire_date | 2008-10-25
    hrdb=> \x
    Expanded display is off.
    

    另一个常用的选项是 format,它可以用于设置不同的输出格式,例如 csv 或者 html 等。

    hrdb=> \pset format csv
    Output format is csv.
    hrdb=> select emp_id, emp_name, hire_date from employee limit 3;
    emp_id,emp_name,hire_date
    1,刘备,2000-01-01
    4,诸葛亮,2006-03-15
    5,黄忠,2008-10-25
    

    📝关于 \pset 命令相关的更多选项配置,可以参考 PostgreSQL 官方文档或者中文文档

    \crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ]命令可以将查询结果按照交叉报表的形式进行显示,colV 是垂直标题字段(默认第一个字段),colH 是水平标题字段(默认第二个字段),colD 是表格中的数据字段(默认第三个字段),sortcolH 是决定水平标题顺序的字段。例如:

    hrdb=> select emp_name, sex, salary from employee limit 10 \crosstabview
     emp_name ||----------+----------+----------
     刘备     | 30000.00 |         
     诸葛亮   | 24000.00 |         
     黄忠     |  8000.00 |         
     魏延     |  7500.00 |         
     孙尚香   |          | 12000.00
     孙丫鬟   |          |  6000.00
     赵云     | 15000.00 |         
     廖化     |  6500.00 |         
     关平     |  6800.00 |         
     赵氏     |          |  6600.00
    (10 rows)
    

    执行脚本文件

    \i filename命令用于读取文件并执行其中的命令。在操作系统当前目录中创建一个脚本文件 test.sql,输入以下语句:

    select current_user;
    

    然后在 psql 中输入以下命令:

    hrdb-> \i test.sql
     current_user 
    --------------
     tony
    (1 row)
    

    如果 filename 是一个连字符(-),表示从标准输入读取内容,知道 EOF 或者 \q 命令结束。这种方式可以用于运行脚本文件时接收手动输入。

    另外,\ir filename命令也可以用于运行脚本文件。两者不同之处在于 \ir 查找文件时使用相对路径;如果从一个脚本文件中读取其他文件,会以当前文件目录作为查找目录,而不是当前工作目录。

    显示详细错误信息

    \errverbose命令可以用于显示最近的服务器错误信息。例如:

    hrdb=> select * from abc;
    ERROR:  relation "abc" does not exist
    LINE 1: select * from abc;
                          ^
    hrdb=> \errverbose
    ERROR:  42P01: relation "abc" does not exist
    LINE 1: select * from abc;
                          ^
    LOCATION:  parserOpenTable, parse_relation.c:1194
    

    查看数据库对象信息

    psql 提供了大量用于查看数据库对象信息的元命令,绝大多数以 \d 开头。其中很多命令支持额外的 S 后缀,用于显示系统对象,否则只显示当前用户拥有访问权限的对象;或者额外的 + 后缀,用于显示额外的信息。

    查看角色和用户

    \du[S+] [ pattern ]或者\dg[S+] [ pattern ]命令用于列出用户创建的角色、用户和组。例如:

    hrdb=> \du
                                             List of roles
          Role name       |                         Attributes                         | Member of 
    ----------------------+------------------------------------------------------------+-----------
     monitor_system_stats | Cannot login                                               | {}
     postgres             | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
     tony                 | No inheritance                                             | {}
    

    如果指定了 S 选项,同时会显示系统创建的角色;如果指定了 + 选项,还会显示额外的描述信息;如果指定了 pattern,只有名称匹配指定模式的角色才会显示。

    查看数据库

    \l[+] [pattern]命令用于列出系统中的所有数据库。例如:

    hrdb=> \l
                                      List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
    -----------+----------+----------+-------------+-------------+-----------------------
     ds2       | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
     hrdb      | tony     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
     pagila    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
     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
    (6 rows)
    

    如果指定 + 选项,还会显示额外的数据库大小、默认表空间和描述信息;如果指定了 pattern,只有名称匹配指定模式的数据库才会显示。

    查看模式

    \dn[S+] [ pattern ]命令用于列出当前数据库中的所有模式(schema)。例如:

    hrdb=> \dn
      List of schemas
      Name  |  Owner   
    --------+----------
     public | postgres
    (1 row)
    

    如果指定了 S 选项,同时会显示系统模式;如果指定了 + 选项,还会显示额外的授权信息和描述;如果指定了 pattern,只有名称匹配指定模式的 schema 才会显示。

    查看表空间

    \db[+] [ pattern ]命令用于列出系统中的所有表空间。例如:

    hrdb=> \db
           List of tablespaces
        Name    |  Owner   | Location 
    ------------+----------+----------
     pg_default | postgres | 
     pg_global  | postgres | 
    (2 rows)
    

    如果指定了 + 选项,还会显示额外的选项、空间大小、授权信息和描述;如果指定了 pattern,只有名称匹配指定模式的表空间才会显示。

    查看表

    \dt[S+] [ pattern ]命令用于列出所有的数据表。例如:

    hrdb=> \dt
                       List of relations
     Schema |       Name        |       Type        | Owner 
    --------+-------------------+-------------------+-------
     public | accounts          | table             | tony
     public | anchors           | table             | tony
     public | bj_subway         | table             | tony
    ...
    (41 rows)
    

    如果指定了 S 选项,同时会显示系统表;如果指定了 + 选项,还会显示额外的大小和描述信息;如果指定了 pattern,只有名称匹配指定模式的表才会显示。

    另外,\d[S+] [ pattern ]命令可以同时列出表、视图、物化视图、索引、序列以及外部表的信息,等价于\dtvmsE[S+] [ pattern ]命令。

    查看索引

    \di[S+] [ pattern ]命令用于列出所有的索引。例如:

    hrdb=> \di
                              List of relations
     Schema |          Name          | Type  | Owner |       Table       
    --------+------------------------+-------+-------+-------------------
     public | accounts_pkey          | index | tony  | accounts
     public | bj_subway_pkey         | index | tony  | bj_subway
     public | department_pkey        | index | tony  | department
    ...
    (39 rows)
    

    如果指定了 S 选项,同时会显示系统表上的索引;如果指定了 + 选项,还会显示额外的大小和描述信息;如果指定了 pattern,只有名称匹配指定模式的索引才会显示。

    查看序列

    \ds[S+] [ pattern ]命令用于列出所有的序列。例如:

    hrdb=> \ds
                      List of relations
     Schema |           Name           |   Type   | Owner 
    --------+--------------------------+----------+-------
     public | accounts_id_seq          | sequence | tony
     public | employees_history_id_seq | sequence | tony
     public | users_id_seq             | sequence | tony
    (3 rows)
    

    如果指定了 S 选项,同时会显示系统创建的序列;如果指定了 + 选项,还会显示额外的大小和描述信息;如果指定了 pattern,只有名称匹配指定模式的序列才会显示。

    查看/编辑视图

    \dv[S+] [ pattern ]命令用于列出所有的视图。例如:

    hrdb=> \dv
               List of relations
     Schema |     Name      | Type | Owner 
    --------+---------------+------+-------
     public | employee_path | view | tony
     public | employees_it  | view | tony
    (2 rows)
    

    如果指定了 S 选项,同时会显示系统创建的视图;如果指定了 + 选项,还会显示额外的大小和描述信息;如果指定了 pattern,只有名称匹配指定模式的视图才会显示。

    \sv[+] view_name命令用于显示视图的定义语句。例如:

    hrdb=> \sv employees_it
    CREATE OR REPLACE VIEW public.employees_it AS
     SELECT employees.employee_id,
        employees.first_name,
        employees.last_name,
        employees.email,
        employees.phone_number,
        employees.hire_date,
        employees.job_id,
        employees.manager_id,
        employees.department_id
       FROM employees
      WHERE employees.department_id = 60
     WITH CASCADED CHECK OPTION
    

    如果指定了 + 选项,同时会显示行号(从 1 开始)。

    \ev [ view_name [ line_number ] ]命令用于编辑视图的定义,类似于\e命令。例如:

    hrdb=> \ev employees_it
    

    在这里插入图片描述
    编辑完成之后,定义语句将会保留在查询缓冲区中,可以输入 \g 运行或者 \r 取消。

    如果指定了 line_number,编辑时自动定位到指定代码行;如果没有指定 view_name,相当于新建一个视图。

    查看/编辑函数和过程

    \df[anptwS+] [ pattern ]命令用于列出所有的函数,其中 a 表示聚合函数,n 表示普通函数、p 表示存储过程,t 表示触发器函数,w 表示窗口函数。例如:

    hrdb-> \df
                                                                                                                                
                                                                                                          List of functions
     Schema |             Name             |      Result data type      |                                                       
                                                                                                                                
            Argument data types                                                                                                 
                                                                                              | Type 
    --------+------------------------------+----------------------------+-------------------------------------------------------
    ----------------------------------------------------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------------------------------------------------
    ------------------------------------------------------------------------------------------+------
     public | abort_any_command            | event_trigger              |                                                       
                                                                                                                                
                                                                                                                                
                                                                                              | func
     public | add_user                     |                            | pv_name character varying, pd_created_at timestamp wit
    hout time zone                                                                                                              
                                                                                                                                
                                                                                              | proc
     public | version_del_func             | trigger                    |                                                       
                                                                                                                                
                                                                                                                                
                                                                                              | func
    ...
    (28 rows)
    

    \sf[+] function_description命令用于显示函数、存储过程等对象的定义。例如:

    hrdb-> \sf add_user(character varying, timestamp without time zone)
    CREATE OR REPLACE PROCEDURE public.add_user(pv_name character varying, pd_created_at timestamp without time zone)
     LANGUAGE plpgsql
    AS $procedure$
    BEGIN
      insert into users(name, created_at)
      values (pv_name, pd_created_at);
    END; $procedure$
    

    如果指定了 + 选项,同时会显示主体代码的行号(从 1 开始)。

    \ef [ function_description [ line_number ] ]命令用于编辑函数、存储过程等对象的定义。该命令的使用方法和\ev命令相同,可以参考上一小节。

    高级功能

    设置变量

    psql 提供了类似于 Unix 中的命令行变量替换的功能。变量由 name/value 对组成,其中 value 可以是任意长度的字符串;name 由字母、数字和下划线组成,区分大小写。

    变量由\set [ name [ value [ ... ] ] ]命令进行设置。例如:

    hrdb=> \set myname 'tony'
    

    使用变量时,需要在变量名前加上冒号(:)。例如:

    hrdb=> \echo :myname
    tony
    

    没有参数的\set命令可以用于显示所有变量的值:

    hrdb=> \set
    AUTOCOMMIT = 'on'
    COMP_KEYWORD_CASE = 'preserve-upper'
    DBNAME = 'hrdb'
    ECHO = 'none'
    ECHO_HIDDEN = 'off'
    ENCODING = 'UTF8'
    ERROR = 'false'
    ...
    

    以上命令返回的大写变量都是 psql 默认设置的特殊变量。

    变量 PROMPT1(常规提示符)、PROMPT2(等待更多输入)以及 PROMPT3(等待终端输入行数据)可以用于设置 psql 的命令提示符。例如:

    hrdb=> \set PROMPT1 '%n@%M %~%R%# '
    tony@192.168.56.104 hrdb=>
    

    其中,百分号代表了特殊的含义;%n 表示用户名,%M 表示服务器的主机名,%~ 表示数据库名,%R 表示 =,%# 表示 #(superuser)或者 >(普通用户)。更多的特殊符号可以参考官方文档或者中文文档

    \set name命令可以将变量 name 设置为空字符串。如果想要删除变量,可以使用\unset name命令。例如:

    hrdb=> \unset myname
    

    另外,\prompt [ text ] name命令可以用于提示用户输入一个变量值,text 是提示文字。例如:

    hrdb=> \prompt 'Please choose Y or N:' mychoice
    Please choose Y or N:Y
    

    SQL 替换

    基于 psql 变量可以实现一个重要的功能:SQL 替换。也就是将变量的内容替换到 SQL 语句中或者作为元命令的参数。例如:

    hrdb=> \set tablename 't1'
    hrdb=> select * from :tablename;
     id 
    ----
      1
      2
    (2 rows)
    
    hrdb=> select :'tablename' as val;
     val 
    -----
     t1
    (1 row)
    

    条件执行命令

    \if expression\elif expression\else以及\endif命令可以用于条件判断,实现嵌套的条件语句。

    hrdb=> \set b false
    hrdb=> \if :b
    hrdb@>   \echo 'b is true'
    \echo command ignored; use \endif or Ctrl-C to exit current \if block
    hrdb@> \else
    hrdb=>   \echo 'b is false'
    b is false
    hrdb=> \endif
    

    执行操作系统命令

    psql 支持使用\! [ command ]直接运行操作系统命令,而不需要退出当前连接。例如:

    hrdb-> \! pwd
    /home/tony
    hrdb-> \! ls -l
    total 16
    -rw-rw-r-- 1 tony tony   18 Aug 26 03:36 command.txt
    -rw-rw-r-- 1 tony tony 1613 Aug 26 17:21 employee.txt
    -rw-rw-r-- 1 tony tony  355 Aug 26 17:00 result.txt
    -rw-rw-r-- 1 tony tony   21 Aug 26 13:55 test.sql
    

    如果直接输入\!,将会切换到操作系统命令行环境,退出之后回到 psql 环境。

    另外,\cd [ directory ]命令用于切换当前工作目录,默认为当前用户的 home 目录。例如:

    hrdb-> \cd /tmp
    hrdb-> \! pwd
    /tmp
    hrdb-> \cd
    hrdb-> \! pwd
    /home/tony
    

    处理大对象

    psql 支持从文件系统读取文件存储为 PostgreSQL 大对象的\lo_import filename [ comment ],以及从将大对象导出到文件中的\lo_export loid filename命令。例如:

    hrdb-> \lo_import '/home/tony/pagila.png' 'this is pagila erd'
    lo_import 155782
    

    返回的数字 155782 是大对象的 id。使用\lo_list或者\dl命令可以查看所有的大对象:

    hrdb-> \lo_list
                Large objects
       ID   | Owner |    Description     
    --------+-------+--------------------
     155782 | tony  | this is pagila erd
    (1 row)
    

    使用 \lo_export 命令将该对象导出到文件系统中:

    hrdb-> \lo_export 155782 '/home/tony/pagila2.png'
    lo_export
    hrdb-> \! ls
    command.txt  employee.txt  pagila2.png	pagila.png  result.txt	test.sql
    

    最后,使用\lo_unlink loid命令删除大对象。例如:

    hrdb-> \lo_unlink 155782
    lo_unlink 155782
    hrdb-> \lo_list
          Large objects
     ID | Owner | Description 
    ----+-------+-------------
    (0 rows)
    

    如果觉得文章对你有用,欢迎关注❤️、评论📝、点赞👍!

    展开全文
  • psql参数

    千次阅读 2019-05-27 11:08:29
    psql [ option… ] [ dbname [ username ]] 选项: -a –echo-all 在读取所有非空输入行时将其打印到打印到标准输出(不适用于交互方式读取的行)。相当于将变量ECHO设置为all -A –no-align 切换到未对齐的输出...

    概要:
    psql [ option… ] [ dbname [ username ]]

    选项:

    • -a
      –echo-all
      在读取所有非空输入行时将其打印到打印到标准输出(不适用于交互方式读取的行)。相当于将变量ECHO设置为all

    • -A
      –no-align
      切换到未对齐的输出模式(默认输出模式以其它方式对齐)。

    • -b
      –echo-errors
      将失败的SQL命令打印到标准错误输出。相当于将变量ECHO设置为错误。

    • -c
      –command = command
      指定psql执行给定的命令字符串。可以使用-f选项以任何顺序和组合此选项。当任意-c或-f指定,psql不从标准输入读取命令;相反,它在按顺序处理所有-c和-f选项后终止。

      命令必须是服务器可完全解析的命令字符串(即不包含psql特定的功能)或单个反斜杠命令。因此不能在-c选项中混合使用SQL和psql元命令。要实现这一点,可重复使用-c选项或者将字符串传递给psql,例如:

      psql -c '\ x' -c 'SELECT * FROM foo;'
      或
      echo '\ x \\ SELECT * FROM foo;' | PSQL
      (\\是分隔符元命令)
      

      传递给-c的每个SQL命令字符串都作为单个查询发送到服务器。因此,即使字符串包含多个SQL命令,服务器也会将其作为单个事务执行,除非字符串中包含明确的BEGIN/COMMIT命令将其划分为多个事务。此外,psql仅打印字符串中最后一个SQL命令的结果。这与从文件读取相同字符串或发送到psql的标准输入时的行为不同,因为psql分别发送每个SQL命令。

      将多个命令放在单个-c字符串中通常会产生意外结果。最好使用重复的-c命令或将多个命令提供给psql的标准输入

    • -d dbname
      –dbname = dbname
      指定要连接的数据库的名称。这相当于将 dbname指定为命令行上的第一个非选项参数
      如果此参数包含=或以有效的URL前缀(postgresql://或postgres://)开头,则将其是为conninfo字符串。

    • -e
      –echo-queries
      将发送到服务器的所有SQL命令也复制到标准输出。这相当于变量ECHO设置为查询。

    • -E
      –echo-hidden
      回显\d和其他反斜杠命令生成的实际查询。可以使用它来研究psql的内部操作。这相当与将变量ECHO_HIDDEN设置为on。

    • -f filename
      –file = filename
      从文件filename中读取命令,而不是标准输入。可以使用-c选项以任何顺序重复和组合此选项。当任意-c或-f指定,psql不从标准输入读取命令;相反,它在按顺序处理所有-c和-f选项后终止。除此之外,此选项在很大程度上等同于元命令\i

      如果filename是- (连字符),则读取标准输入直到EOF只是或\q元命令。这可以用于将交互式输入与来自文件的输入交叉。但请注意,在这种情况下不能使用Readline(就像指令了-n一样)。

    • -F
      –field-separator = separator
      使用分隔符separator作为为对齐输出的字段分隔符。这相当与 \pset fieldsep or \f

    • -h hostname
      –host = hostname
      指定运行服务器的计算机的主机名。如果值以斜杠开头,则将其用作Unix域套接字的目录

    • -H
      –html
      打开HTML表格输出。这相当于\pset format html或\H命令。

    • -l
      –list
      列出所有可用的数据库,然后提出。其他非连接选项将被忽略。这类似与元命令\list

    • -L filename
      –log-file = filename
      除了正常输出目标之外,将所有查询输出写入文件filename

    • -n
      –no-readline
      不要使用Readline进行行编辑,也不要使用命令历史记录。这在切割和粘贴时关闭标签扩展非常有用。

    • -o filename
      –output = filename
      将所有查询输出放入文件filename。这相当于命令\o。

    • -p port
      –port = port
      指定服务器正在侦听连接的TCP端口或本地Unix域套接字文件扩展名。默认PGPORT环境变量的值,如果未设置,则默认为编译时指定的端口,通常为5432。

    • -P assignment
      –pset = assignment
      指定打印选项,格式为\pset。请注意,必须使用等号而不是空格分隔名称和值。例如要将输出格式设置为LaTeX,可以编写为-P format = latex

    • -q
      –quiet
      指定psql应该静默执行其工作。默认情况下,他会打印欢迎消息和各种信息输出。如果使用此选项,则不会发生这种情况。这对-c选项很优雅。这相当于变量QUIET设置为on。

    • -R separator
      –record-separator = separator
      使用separator作为未对齐输出的记录分隔符。这相当与\pset recordsep命令。

    • -s
      –single-step
      以single-step模式运行。这意味着在将每个命令发送到服务器之前会提示用户,并且还可以选择取消执行。可使用它来调试脚本。

    • -S
      –single-line
      以single-line模式运行,其中换行符终止SQL命令,如同“;”。

    • -t
      –tuples-only
      关闭列名称和结果行计数页脚等的打印。这相当于\t命令。

    • -T table_options
      –table-attr = table_options
      指定要放在HTML table标记中的选项。

    • -U username
      –username = username
      以用户名username而不是默认用户名连接到数据库。(username必须获得许可)

    • -v assignment
      –set = assignment
      –variable = assignment
      执行变量复制,例如\set meta-command。请注意,必须在命令行上使用等号分割名称和值。要取消设置变量请不要使用等号。要设置具有控制的变量,请使用等号,但不要使用该值。这些分配是在启动的早期阶段完成的,因此为内部目的保留的变量可能会在以后被覆盖。

    • -V
      –version
      打印psql版本并退出。

    • -w
      –no-password
      永远不要发出密码提示。如果服务器需要密码身份验证,并且其他方式(如.pgpass文件)无法使用密码,则连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中非常有用。
      请注意,此选项将保持为整个会话设置,因此它会影响元命令\connect的使用以及初始连接尝试。

    • -W
      –password
      强制psql在连接到数据库之前提示输入密码。
      该选项永远不是必须的,因为如果服务器需要密码身份验证,psql将自动提示输入密码。但是,psql将浪费连接尝试,发现服务器需要密码。某些情况下值得输入-W以避免额外的连接尝试。
      请注意,此选项将保持为整个会话设置,因此它会影响元命令\connect的使用以及初始连接尝试。

    • -x
      –expanded
      打开扩展表格式化模式。这相当于\x命令。

    • -X
      –no-psqlrc
      不要读取启动文件(系统范围的psqlrc文件和用户~/.psqlrc文件)。

    • -z
      –record-separator-zero
      将未对齐输出到记录分隔符设置为零字节。

    展开全文
  • 接入PostgreSQL数据库: psql -h IP地址 -p 端口 -U 数据库名 之后会要求输入数据库密码 二、访问数据库 1、列举数据库:\l 2、选择数据库:\c 数据库名 3、查看该某个库中的所有表:\dt 4、切换数据库:\c ...

    一、建立数据库连接
    ----------------
    接入PostgreSQL数据库: psql -h IP地址 -p 端口 -U 数据库名

    之后会要求输入数据库密码

    二、访问数据库

    1、列举数据库:\l
    2、选择数据库:\c 数据库名
    3、查看该某个库中的所有表:\dt
    4、切换数据库:\c interface
    5、查看某个库中的某个表结构:\d 表名
    6、查看某个库中某个表的记录:select * from apps limit 1;
    7、显示字符集:\encoding
    8、退出psgl:\q

    ==================================================================================

    列出当前数据库所有表
    \dt

    列出表名
    SELECT tablename FROM pg_tables;
    WHERE tablename NOT LIKE 'pg%'
    AND tablename NOT LIKE 'sql_%'
    ORDER BY tablename;

    列出数据库名
    \l

    SELECT datname FROM pg_database;

    切换数据库
    \c 数据库名

    1、通过命令行查询
    \d 数据库 —— 得到所有表的名字
    \d 表名 —— 得到表结构
    2、通过SQL语句查询
    "select * from pg_tables" —— 得到当前db中所有表的信息(这里pg_tables是系统视图)
    "select tablename from pg_tables where schemaname='public'" —— 得到所有用户自定义表的名字(这里"tablename"字段是表的名字,"schemaname"是schema的名字。用户自定义的表,如果未经特殊处理,默认都是放在名为public的schema下)

     View Code

    ==================================================================================

    postgresql数据管理系统使用命令方式有两种:
    1. 内部命令,以反斜线开始 \ ,如: \l 显示所有数据库
    2. 标准SQL命令,以分号 ; 或 \g 结束,可以使用多行

    数据库的关键操作:
    1. 启动服务  2. 登录  3. 建立数据库  4. 建立表  5. 插入记录到表中 
    6. 更新/删除/查询/修改操作           7. 退出    8. 停止服务

    在windows7中安装的postgresql默认使用GBK字符集,经常不能使用显示中文的数据表,解决办法:
    注意:在windows 7下的postgresql中写操作时要使用GBK,读操作时要用UTF8;

    设置字符集为 utf-8 就可以了.
    postgres=# \encoding utf-8       // 设置客户端的字元集
    postgres=# \encoding                  // 显示客户端的字元集
    postgres=# show client_encoding;      // 显示客户端的字元集
    postgres=# show server_encoding;      // 显示服务器的字元集

    启动服务:
    net start postgresql-9.5
    停止服务:
    net stop postgresql-9.5

    获取命令帮助:
    c:\> psql --help

    登录( 注意: postgres 是默认用户即管理员 ):
    路径 psql -h 服务器 -U 用户名  -d 数据库 -p 端口地址  // -U 是大写
    C:\> psql -h localhost -U postgres -p 5432            // 默认打开postgres数据库
    C:\> psql -h 127.0.0.1 -U postgres -d fengdos -p 5432 // 打开fengdos数据库
    C:\> psql -U postgres                                 // 快速登录(全部使用默认设置)
    // 使用某些有密码的用户的情况下, 会提示输入密码.
    用户 postgres 的口令: ILoveYou         // 输入时不会显示任何字符
    // 成功后显示:
    psql (9.5.3)
    输入 "help" 来获取帮助信息.
    // 进入postgresql数据库系统提示符状态, ******=# 中=#前面为当前使用的数据库
    postgres=# help          // 获取系统帮助,显示如下:
    ---------------------------------------------------------
    您正在使用psql, 这是一种用于访问PostgreSQL的命令行界面
    键入:\copyright 显示发行条款
          \h 显示 SQL 命令的说明
          \? 显示 pgsql 命令的说明 (pgsql内部命令)
          \g 或者以分号(;)结尾以执行查询
          \q 退出注: 数据库名称区分大小写的。
    ---------------------------------------------------------
    postgres=# \help         // 获取SQL命令的帮助,同 \h
    postgres=# \quit         // 退出,同 \q
    postgres=# \password dlf // 重新设置用户dlf的密码,然后需要 \q退出后才生效
    c:\>psql exampledb < user.sql  // 将user.sql文件导入到exampled数据库中
    postgres=# \h select   // 精细显示SQL命令中的select命令的使用方法
    postgres=# \l          // 显示所有数据库
    postgres=# \dt         // 显示当前数据库中的所有表
    postgres=# \d [table_name]  // 显示当前数据库的指定表的表结构
    postgres=# \c [database_name]  // 切换到指定数据库,相当于use
    postgres=# \du                 // 显示所有用户
    postgres=# \conninfo           // 显示当前数据库和连接信息
    postgres=# \e   // 进入记事本sql脚本编辑状态(输入批命令后关闭将自动在命令行中执行)
    postgres=# \di  // 查看索引(要建立关联)
    postgres=# \prompt [文本] 名称    // 提示用户设定内部变数
    postgres=# \encoding [字元编码名称]  // 显示或设定用户端字元编码
    *可以将存储过程写在文本文件中aaa.sql,然后在psql状态下:
    postgres=# \i aaa.sql    // 将aaa.sql导入(到当前数据库)
    postgres=# \df           // 查看所有存储过程(函数)
    postgres=# \df+ name     // 查看某一存储过程
    postgres=# select version();            // 获取版本信息
    postgres=# select usename from pg_user; // 获取系统用户信息
    postgres=# drop User 用户名             // 删除用户

    其它SQL命令通用如(标准化SQL语句):
    *创建数据库:
    create database [数据库名];

    *删除数据库:
    drop database [数据库名]; 

    *创建表:
    create table ([字段名1] [类型1] ;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;);

    *在表中插入数据:
    insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);

    *显示表内容:
    select * from student;

    *重命名一个表:
    alter table [表名A] rename to [表名B];

    *删除一个表:
    drop table [表名]; 

    *在已有的表里添加字段:
    alter table [表名] add column [字段名] [类型];

    *删除表中的字段:
    alter table [表名] drop column [字段名];

    *重命名一个字段: 
    alter table [表名] rename column [字段名A] to [字段名B];

    *给一个字段设置缺省值: 
    alter table [表名] alter column [字段名] set default [新的默认值];

    *去除缺省值: 
    alter table [表名] alter column [字段名] drop default;
     
    *修改表中的某行某列的数据:
    update [表名] set [目标字段名]=[目标值] where [该行特征];

    *删除表中某行数据:
    delete from [表名] where [该行特征];
    delete from [表名];    // 删空整个表

    *可以使用pg_dump和pg_dumpall来完成。比如备份sales数据库:
    pg_dump drupal>/opt/Postgresql/backup/1.bak
     

    ===================================================================================================

    1.列出所有表名的查询语句

    SELECT tablename FROM pg_tables
    WHERE tablename NOT LIKE 'pg%'
    AND tablename NOT LIKE 'sql_%'
    ORDER BY tablename;

    2.列出表中所有的数据

    SELECT * FROM someTable;

    3.执行外部脚本

    #/opt/PostgreSQL/8. 3/bin/psql - Upostgres ;登陆到数据库的控制台界面
    postgres= # \i /root/db. sql
         \i 命令用于执行一个外部的sql脚本文件。

    4.导出数据库为外部的脚本

    #/opt/PostgreSQL/8. 3/bin/ pg_dump - Upostgres - C - fdb. sql database

    -C create    -f 是导出后的文件名

    5.postgresql 插入16进制数 

    INSERT INTO tableAAA VALUES( x'0001f' : : integer, '鉴权' , 'Authority' )

    6.使用 TG_RELNAME 报错ERROR:  syntax error at or near "$1" at character

    [引]http://www.dbmonster.com/Uwe/Forum.aspx/postgresql/2051/TG-RELNAME-problem

    Perhaps you will get some idea if you read the document:
    37. 6. 4. Executing Dynamic Commands

    改:执行动态语句

     EXECUTE 'INSERT INTO TG_RELNAME VALUES (NEW.start_time , NEW.id , NEW.end_time)';

    7. psql 常用命令

    a. \c tesdb1 - - 将当前连接的testdb数据库改变成 testdb1 。
    b . \q - - 断开与Postgres服务器的连接
    c . \l 列出所有数据库的名字
        \l+ 列出所有数据库的名字以及字符集编码
    d. \d [ 名字] 描述表, 索引, 序列, 或者视图
                     列出表/索引/序列/视图/系统表
       \d{t| i| s| v| S} [ 模式] ( 加 "+" 获取更多信息)
                     - - 列出表/索引/序列/视图/系统表
       \d tablename - - 查看表的结构
       \dt - - 列出数据库中所有表

    8.在PostgreSQL中如何删除重复记录

    【转】http: / / hi. baidu. com/cicon/blog/item/e14f217f4eeee20429388a0c. html

    在PostgreSQL中删除重复记录其实很简单,不论有多少行重复,只要在要删除重复记录的表中table加一列rownum字段( id为table表中的主键) ,类型设置为serial类型即可,然后执行sql
    delete from deltest where rownum not in(
    select max(rownum) from deltest
    );
    最后删除列rownum即可

    ==============================================

    正文:

    连接数据库操作:

    psql是postgresql数据库提供的连接数据库shell命令,格式 psql 【option】 dbname

    在终端输入psql 会使用默认的方式连接本地数据库,使用的用户名是登陆linux系统使用的用户名,

    psql -U username -W pass 以及psql -U username -W pass databasenaem都可以实现连接数据库的功能,第一种方式是使用用户名username密码pass连接默认数据库(具体链接那个数据库还没搞清 楚),第二种方式使用用户名username密码pass连接username数据库。如果登录成功之后将显示类似信息

    Welcome to psql 8.0.6, the PostgreSQL interactive terminal.

    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

    连接成功之后所有的命令都是使用”\“+ 字符或者word完成相应的功能。现将常用的几个列车

    \l      列出所有数据库

    \dt   列出连接数据库中所有表

    \di   列出连接数据库中所有index

    \dv  列出连接数据库中所有view

    \h    sql命令帮助

    \?    \ 所有命令帮助

    \q   退出连接

    \d tablename  列出指定tablename的表结构

    可以尝试执行下面两句sql

    SELECT current_date

    SELECT version()

    是不是nothing happened,这是因为postgresql数据库要求必须使用;结尾否则不予执行,加上;之后就能看到结果了。

    如果我们想创建数据库怎么办呢?

    我们知道createdb和dropdb可以创建和删除数据库,但是如果我们这个时候执行出现什么问题呢?可以试一试,提示是个错误。

    为什么呢?

    createdb和dropdb是shell脚本,所以现在又两种方式执行

    (1).退出连接进入终端,输入createdb test —U user -W pass 稍等提示创建数据库成功

                                              dropdb test —U user -W pass    提示drop成功

    (2).在未退出连接中使用 \! createdb test —U user -W pass 稍等提示创建数据库成功

                                          \! dropdb test —U user -W pass    提示drop成功

     

    展开全文
  • gp工具命令之psql

    2021-01-24 22:04:33
    指定psql将执行指定的命令字符串,然后退出。 这在shell脚本中很有用。 command必须是服务器可以完全解析的命令字符串,也可以是单个反斜杠命令。不能将SQL和psql元命令与此选项混合使用。 为此
  • psql develop 8

    2016-07-12 10:28:14
    内有破解密匙和汉化包
  • psql命令大全

    2017-08-07 14:39:43
    常用命令
  • PSQL的使用

    2021-04-05 21:46:30
    psql使用 -bash-4.2$ psql --help psql is the PostgreSQL interactive terminal. Usage: psql [OPTION]… [DBNAME [USERNAME]] General options: -c, --command=COMMAND run only single command (SQL or internal)...
  • vipsql 用于与psql交互的vim插件
  • 直接写入中国的省份和城市的数据.sql文件, 不知道数据库表结构的可以找我拿,这份资源只是数据,谢谢
  • psql的简单使用

    2021-06-17 17:15:02
    psql工具使用方法 可以直接看到数据库 psql -l 连接数据库 psql -h <host or ip> -p <port> [数据库名称] [用户名称] 这些也可以通过环境变量指定:示例如下 export PGDATABASE=xxx export PGHOST=xxx...
  • PSQL指令

    2020-04-07 18:40:31
    PSQL指令 \du:查看所有用户 select current_user:查看当前用户 h create use:获取该命令的语法帮助 create user user_name:创建新的用户 如:create user user1 login encrypted password 'user1'; 授予与回收 ...
  • 这篇文章记录一下使用PostgreSQL的psql客户端免密码登录的几种方法。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,291
精华内容 11,316
关键字:

psql