从命令行运行PostgreSQL查询

我在表....中插入了一个数据我想看到整个表的行,列和数据。我如何通过命令显示它?

655941 次浏览
SELECT * FROM my_table;

其中my_table是你的表名。

编辑:

psql -c "SELECT * FROM my_table"

或者psql,然后输入你的查询。

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

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

例如,发起一个交互式会话:

psql -U username mydatabase
mydatabase=#

在这一点上,你可以直接输入一个查询,但你必须记得用分号;来结束查询

例如:

mydatabase=# SELECT * FROM mytable;

如果你忘记了分号,那么当你按回车键时,你将在返回行上什么也得不到,因为psql将假设你还没有输入完你的查询。这会导致各种各样的困惑。例如,如果您重新输入相同的查询,很可能会产生语法错误。

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

mydatabase=# asdfs
mydatabase=# ;
ERROR:  syntax error at or near "asdfs"
LINE 1: asdfs
^
经验法则是: 如果你没有收到来自psql的响应,但你期望至少SOMETHING,那么你忘记了分号;

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

PGPASSWORD=password  psql -U username -d dbname -c "select * from my_table"
  1. 打开命令提示符,进入Postgres安装的目录。在我的情况下,我的Postgres路径是“D:\TOOLS\Postgresql-9.4.1-3”。然后移动到Postgres的bin目录。因此命令提示符显示为"D:\TOOLS\Postgresql-9.4.1-3\bin>"
  2. 现在我的目标是从用户表中使用“UserId”值选择“UserName”。因此数据库查询是"选择你。“用户名”来自用户u“标识”= 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其中u.\"UserId\"=1;

.

在应用程序(Mac)中打开“SQL Shell (psql)”。

enter image description here

单击enter以获得默认设置。根据提示输入密码。

enter image description here

*)键入\?寻求帮助

*)输入\conninfo查看你连接的用户。

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

enter image description here

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

enter image description here

您应该看到键提示符更改为新的DB,如下所示:enter image description here

*)现在您在一个给定的DB中,您想知道该DB的schema。最好的命令是\dn

enter image description here

其他也可以工作(但不是很好)的命令有select schema_name from information_schema.schemata;select nspname from pg_catalog.pg_namespace;:

enter image description here

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

enter image description here

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

enter image description here

*)下面是上面的DB, Schema和Tables在pgAdmin中的样子:

enter image description here

我对格兰特的回答毫无疑问。但我有时会遇到一些问题,比如如果列名类似于postgresql的任何保留关键字,如自然,在这种情况下,类似的SQL很难从命令行运行,因为“\natural\”将在查询字段中需要。因此,我的方法是在单独的文件中编写SQL,然后从命令行运行SQL文件。这还有另一个好处。如果您必须更改大型脚本的查询,则不需要触及脚本文件或命令。只像这样更改SQL文件

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

我还注意到查询

SELECT * FROM tablename;

给出PSQL命令提示符错误 和< / p >

SELECT * FROM "tablename";

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

我将为一个命令添加我的经验,在windows机器上。 我想尝试运行一个命令,从中我将获得表的内容

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

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

  • - u postgres - user
  • -d typeorm -我要连接的数据库
  • - c…-我的查询命令
  • ; ——分号

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

在有密码保护的数据库中直接执行SQL命令。它宁愿在命令行中使用连接字符串格式。

.使用实例
psql -d postgresql://postgres:password@localhost:5432/dbname
-c "create database sample1 --or any command"

## Using SQL file
PGPASSWORD=myPassword psql -h myDbHost -U myUser -p 5432 -d my_db -a -q -f /path/to/sql/file.sql
## Or
PGPASSWORD=myPassword psql -h myDbHost -U myUser -p 5432 -d my_db < /path/to/sql/file.sql


## Using command
PGPASSWORD=myPassword psql -h myDbHost -U myUser -p 5432 -d my_db -c "select * from my table limit 1;"