与大多数SQL衍生工具不同,PostgreSQL不使用传统的DESCRIBE TABLE foo
语法;它使用\d foo
(来自psql
解释器)。
这很好,除了(特别是当我在一个有限宽度的终端中打开psql
时)很难读取\d
的输出,因为有一堆列和一堆值,很难将所有内容排列起来。
所以,我的简单问题是,当使用\d
及其变体(例如\df
)时,有没有办法只得到一列输出?例如,如果我执行\d users
,而不是得到:
Table "public.users"
Column | Type | Collation | Nullable | Default
------------+--------------------------+-----------+----------+-----------------------------------
id | integer | | not null | nextval('users_id_seq'::regclass)
created_at | timestamp with time zone | | not null | CURRENT_TIMESTAMP
updated_at | timestamp with time zone | | not null | CURRENT_TIMESTAMP
username | character varying(255) | | not null |
title | character varying(500) | | |
first_name | character varying(50) | | |
last_name | character varying(50) | | |
字符串
是否有某种方法(例如\d users Column
,尽管这不起作用)可以得到:
Table "public.users"
Column |
------------+
id |
created_at |
updated_at |
username |
first_name |
last_name |
型
4条答案
按热度按时间nue99wik1#
\d
输出的实际子集是的。通过将
ECHO-HIDDEN
设置为on
来打开引擎盖,扔掉任何你不喜欢的东西,只抓取你想要的东西。输出的每一部分都可以自己工作。-E
--echo-hidden
回显\d
和其他反斜杠命令生成的实际查询。可以用它来研究psql的内部操作。这相当于将变量ECHO_HIDDEN
设置为on
。PostgreSQL不理解
\d
。它是psql
的内部元命令,psql
和其他客户端一样。您看到的数据是客户端发出一系列查询并将其输出粘合在一起的结果-上面的设置可以让您了解这些查询是什么。您可以“手动”使用它们,甚至重新排列它们以更好地满足您的目的。终端宽度
您可能想查看
expanded
模式。psql
提供多种输出格式可供选择:wrapped
的宽度是可调的columns
。你也应该在它的属性中控制你的终端屏幕缓冲区的布局-在那里,你可以增加宽度,当某些东西太宽时,你可以向右滚动,如果你想的话,或者只是让它伸出屏幕。查询结构/schema
这里有符合SQL标准的
information_schema
命名空间,在其中,有columns
视图。你可以直接去那里:字符串
该模式中的视图指向相同的位置。当您运行
\d
时,psql
获取表和视图的列列表。实际数据位于psql
直接查询的系统目录中。bvn4nwqk2#
您应该检查命令
\gdesc
,它描述了查询将具有的结果列。假设你有一个简单的三列表。
字符串
你得到的结果是
型
我也鼓励你检查this thread
zyfwsgd63#
直接使用系统目录pg_attribute:
字符串
pg_attribute
存储表类对象的列名,例如表,索引,视图等。'users'::regclass
将表名转换为attrelid
所需的oid
。attnum > 0
消除了系统列cmax
,cmin
,ctid
等。cgh8pdjw4#
您可以使用
less -S
或leafpad
或任何其他不会换行的文本编辑器程序作为分页器:字符串
或者,您可以查询信息模式以获得具有扩展输出的类似数据:
型