从命令行运行PostgreSQL查询


278

我将数据插入表中....我现在想看看整个表,其中包括行,列和数据。如何通过命令显示它?

Answers:


475

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

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

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

psql -U username mydatabase 
mydatabase=#

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

例如:

mydatabase=# SELECT * FROM mytable;

如果您忘记了分号,那么当您按Enter键时,返回行将不会有任何结果,因为psql将假定您尚未完成查询输入。这可能导致各种混乱。例如,如果您重新输入相同的查询,则很可能会创建语法错误。

作为实验,尝试在psql提示符下键入所需的任何乱码,然后按Enter。psql将默默地为您提供新的路线。如果在该新行上输入分号,然后按Enter键,则将收到错误:

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

经验法则是:如果您没有收到任何答复,psql但您期望至少有一些结果,那么您忘记了分号;


4
由于至少为7.2(这比我费力检查的时间还早,所以可能更早),psql可以选择--single-line(或-s)使每个命令立即执行,而无需添加分号。
Gordon

3
我花了一个小时进行调试,问题是缺少分号。THANK YOU
道森乙

106
SELECT * FROM my_table;

my_table表格的名称在哪里。

编辑:

psql -c "SELECT * FROM my_table"

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


7
psql -U username -c your_database "SELECT * FROM my_table"
DrColossos

3
如前所述,您应该以分号结束命令 如果您使用的是Windows系统,请在打开控制台提示符后将其 基本显示给Windows用户cmd.exe /c chcp 1252
D_Guidi 2014年

2
对于未来的用户,在查询之前确保你的数据库名称前添加-d和-c:PSQL -U用户名-d MyDatabase的-c“SELECT * FROM MYTABLE”
jmhead

2
没有为我工作。我做到了psql: FATAL: database "SELECT * FROM tb_name" does not exist
Jaswinder

正如@DrColossos指出的那样,至少在Windows cli / batch环境中,似乎需要在命令前后加上双引号。
jewbix.cube 2016年

43

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

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

3
不知道可以用这种方式提供密码。做测试时真的很方便。谢谢
zhihong '18

21

从应用程序(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;

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

*)这是上面的数据库,模式和表在pgAdmin中的外观:

在此处输入图片说明


3
  1. 打开命令提示符,然后转到Postgres的安装目录。在我的情况下,我的Postgres路径为“ D:\ TOOLS \ Postgresql-9.4.1-3”。此后移至Postgres的bin目录。因此命令提示符显示为“ D:\ TOOLS \ Postgresql-9.4.1-3” \ bin>”
  2. 现在,我的目标是使用“ UserId”值从用户表中选择“ UserName”。因此数据库查询是“从u用户中选择u。” UserName”,其中u。“ UserId” = 1 ”。

如下针对postgres的psql命令提示符编写了相同的查询。

D:\ TOOLS \ Postgresql-9.4.1-3 \ bin> psql -U postgres -d DatabaseName -h localhost-t -c从用户u中选择“ u。\“ UserName \”其中u。\“ UserId \” = 1;


3

我毫不怀疑@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

3

我还注意到查询

SELECT * FROM表名;

在psql命令提示符下给出错误,并且

SELECT * FROM“表名”;

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


-8

对于特定类型的语句,您可以找到更适合使用的语句Azure Data Studio-内置命令行附带的所有其他功能。在工作室中,您可以找到打字说明并更轻松地阅读输出。

请按照以下步骤操作:

  1. 安装Azure Data Studio-是一个跨平台的现代编辑器,专注于数据开发;它是开源的并且是可扩展的-PostgreSQL本身就是基于两件事。
  2. 安装PostgreSQL扩展
  3. 连接到本地或远程服务器:

    在此处输入图片说明

  4. 仅专注于编写和执行SQL:

    在此处输入图片说明

许多不错的功能,例如保存连接,创建服务器组甚至内置终端(如果您更愿意通过来完成某些任务)psql

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.