ChatGPT解决这个技术问题 Extra ChatGPT

从命令行运行 PostgreSQL 查询

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


T
Tomalak

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

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

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

psql -U username mydatabase 
mydatabase=#

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

例如:

mydatabase=# SELECT * FROM mytable;

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

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

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

经验法则是:如果您没有收到来自 psql 的响应,但您至少期待某事,那么您忘记了分号 ;


至少从 7.2 开始(这是我费心检查的时间,可能更早),psql 具有选项 --single-line(或 -s),它可以使每个命令立即执行,而无需添加分号。
我花了一个小时调试,问题是缺少分号。谢谢你
@Gordon 提到的单行选项是一个 CAPITAL s(即 -S),如果您使用小写 -s 表示 single-step mode (confirm each query))。您可以通过运行 psql --help 查看选项。
a
a_horse_with_no_name
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;" - 它有效
ס
סטנלי גרונן

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

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

从来不知道可以通过这种方式提供密码。做测试的时候真的很方便。谢谢
G
Gene

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

https://i.stack.imgur.com/CAbO6.png

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

https://i.stack.imgur.com/CSH1j.png

*) 输入 \? 寻求帮助

*) 输入 \conninfo 以查看您以哪个用户身份连接。

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

https://i.stack.imgur.com/CWPQX.png

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

https://i.stack.imgur.com/UKbo0.png

https://i.stack.imgur.com/jeq7Q.png

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

https://i.stack.imgur.com/58NCB.png

select schema_name from information_schema.schemata;select nspname from pg_catalog.pg_namespace; 也可以使用(但效果不佳)的其他命令:

https://i.stack.imgur.com/w2ydF.png

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

https://i.stack.imgur.com/RtKc2.png

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

https://i.stack.imgur.com/y64ac.png

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

https://i.stack.imgur.com/v3iYN.png


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

我还注意到查询

选择 * FROM 表名;

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

选择 * 从“表名”;

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


D
Devil's Dream

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

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

K
KPatel

打开命令提示符并转到 Postgres 的安装目录。在我的情况下,我的 Postgres 路径是“D:\TOOLS\Postgresql-9.4.1-3”。之后移动到 Postgres 的 bin 目录。所以命令提示符显示为“D:\TOOLS\Postgresql-9.4.1-3 \bin>" 现在我的目标是使用 "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个;


S
Stefan

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

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

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

-U postgres - 用户

-d typeorm - 我要连接的数据库

-c ... - 我的查询命令

- 分号

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


M
Mehdi Hamin

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

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

D
DEV Tiago França

## 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;"