【问题标题】:Run PostgreSQL queries from the command line从命令行运行 PostgreSQL 查询
【发布时间】:2013-11-09 13:35:33
【问题描述】:

我在表格中插入了一个数据....我现在想查看包含行、列和数据的整个表格。我如何通过命令显示它?

【问题讨论】:

    标签: database postgresql


    【解决方案1】:

    psql -U username -d mydatabase -c 'SELECT * FROM mytable'

    如果您是 postgresql 新手并且不熟悉使用命令行工具 psql,那么当您进入交互式会话时,您应该注意一些令人困惑的行为。

    例如,启动一个交互式会话:

    psql -U username mydatabase 
    mydatabase=#
    

    此时您可以直接输入查询,但您必须记住用分号;终止查询

    例如:

    mydatabase=# SELECT * FROM mytable;
    

    如果您忘记了分号,那么当您按下回车键时,您的返回行将一无所获,因为psql 将假定您尚未完成输入查询。这会导致各种混乱。例如,如果您重新输入相同的查询,您很可能会产生语法错误。

    作为一个实验,尝试在 psql 提示符下输入任何你想要的乱码,然后按回车键。 psql 会默默地为你提供新的线路。如果您在该新行上输入分号然后回车,您将收到错误:

    mydatabase=# asdfs 
    mydatabase=# ;  
    ERROR:  syntax error at or near "asdfs"
    LINE 1: asdfs
        ^
    

    经验法则是: 如果您没有收到来自 psql 的回复,但您至少期待一些东西,那么您忘记了分号 ;

    【讨论】:

    • 至少从 7.2 开始(这是我费心检查的时间,它可能更早),psql 有选项--single-line(或-s),它使每个命令立即无需添加分号。
    • 我花了一个小时调试,问题是缺少分号。谢谢你
    • @Gordon 提到的单行选项是大写字母(即-S),如果您使用小写的-s,则表示single-step mode (confirm each query))。你可以通过运行psql --help来查看选项。
    【解决方案2】:
    SELECT * FROM my_table;
    

    其中my_table 是您的表的名称。

    编辑:

    psql -c "SELECT * FROM my_table"
    

    或者只是psql,然后输入您的查询。

    【讨论】:

    • psql -U username -c your_database "SELECT * FROM my_table"
    • 如前所述,如果您使用的是 Windows 系统,则应以分号 ; 结束您的命令,基本上见notws for windows users,只需在您完成后输入cmd.exe /c chcp 1252打开控制台提示符。
    • 对于未来的用户,请务必在您的数据库名称前添加 -d,并在查询前添加 -c:psql -U username -d mydatabase -c 'SELECT * FROM mytable'
    • 对我不起作用。我做到了psql: FATAL: database "SELECT * FROM tb_name" does not exist
    • @GstjiSaini 看起来像 DrColossos 忘记了 -d 参数 psql -U ravil -d hw5 -c "SELECT * FROM table_name;" -- 它有效
    【解决方案3】:

    如果您的数据库受密码保护,那么解决方案是:

    PGPASSWORD=password  psql -U username -d dbname -c "select * from my_table"
    

    【讨论】:

    • 从来不知道可以通过这种方式提供密码。做测试的时候真的很方便。谢谢
    【解决方案4】:

    从您的应用程序 (Mac) 打开“SQL Shell (psql)”。

    点击进入默认设置。出现提示时输入密码。

    *) 输入\? 寻求帮助

    *) 键入 \conninfo 以查看您连接的用户身份。

    *) 键入 \l 以查看数据库列表。

    *) 通过\c <Name of DB>连接数据库,例如\c GeneDB1

    您应该会看到密钥提示更改为新数据库,如下所示:

    *) 现在您在给定的数据库中,您想知道该数据库的模式。执行此操作的最佳命令是 \dn

    其他同样有效(但效果不佳)的命令是 select schema_name from information_schema.schemata;select nspname from pg_catalog.pg_namespace;

    -) 现在您已经有了 Schema,您想知道这些 Schema 中的表。为此,您可以使用dt 命令。例如\dt "GeneSchema1".*

    *) 现在您可以进行查询了。例如:

    *) 以下是上述 DB、Schema 和 Tables 在 pgAdmin 中的样子:

    【讨论】:

    • 我们如何获取整个模式的块?连接数据库后,以下不起作用SELECT show_chunks(older_than => interval '1 day');
    • 看起来 show_chucks() 是您正在调用的方法或存储过程。我不知道,因为我不知道该方法的文档。你试试 \dt "YourSchema".* ???
    【解决方案5】:

    我也注意到查询

    SELECT * FROM 表名;

    在 psql 命令提示符下给出错误 和

    SELECT * FROM "表名";

    运行良好,真的很奇怪,所以不要忘记双引号。 我一直很喜欢数据库:-(

    【讨论】:

      【解决方案6】:

      我对@Grant 的回答毫无疑问。但是我有时会遇到一些问题,例如列名是否类似于 postgresql 的任何保留关键字,例如 natural 在这种情况下,类似的 SQL 很难从命令行运行,因为 "\natural\" 将查询字段中需要。所以我的方法是在单独的文件中编写 SQL 并从命令行运行 SQL 文件。这也有另一个优势。如果您必须更改大型脚本的查询,则无需触摸脚本文件或命令。只更改这样的 SQL 文件

      psql -h localhost -d database -U postgres -p 5432 -a -q -f /path/to/the/file.sql
      

      【讨论】:

        【解决方案7】:
        1. 打开命令提示符并转到安装 Postgres 的目录。在我的情况下,我的 Postgres 路径 是“D:\TOOLS\Postgresql-9.4.1-3”。之后移动到 Postgres 的 bin 目录。所以命令提示符显示为“D:\TOOLS\ Postgresql-9.4.1-3\bin>"
        2. 现在我的目标是使用“UserId”值从用户表中选择“UserName”。所以数据库查询是“Select u.”UserName” from users u Where u.“UserId”=1强>”。

        对于 postgres 的 psql 命令提示符,写下相同的查询。

        D:\TOOLS\Postgresql-9.4.1-3\bin>psql -U postgres -d DatabaseName -h localhost - t -c "Select u.\"UserName\" from users u Where u.\"UserId\"=1;

        【讨论】:

          【解决方案8】:

          我将在 Windows 机器上添加我对一个命令的经验。 我想尝试运行一个命令来获取表格内容。

          这是对我有用的单个命令:

          psql -U postgres -d typeorm -c "SELECT * FROM \"Author\"";

          • -U postgres - 用户
          • -d typeorm - 我要连接的数据库
          • -c ... - 我的查询命令
          • ; - 分号

          我遇到了一些问题,主要是弄清楚如何准确设置查询部分。我尝试了不同的命令,例如:使用 '、"、(),但除了这个符号之外,没有什么对我有用。

          【讨论】:

            猜你喜欢
            • 2017-08-07
            • 2022-10-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-09
            相关资源
            最近更新 更多