提问人:machineghost 提问时间:11/12/2023 更新时间:11/12/2023 访问量:67
PostgreSQL \d 命令:有什么方法可以只“选择”一列吗?
PostgreSQL \d Commands: Any way to "select" only one column?
问:
与大多数 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 |
答:
您应该检查命令 \gdesc
,它描述了查询将具有的结果列。
因此,假设您有一个包含三列的简单表。如果您像下面这样使用它,那将会有所帮助
SELECT * FROM sample_table \gdesc
您将收到的结果是
Column | Type
------------+-----------------------------
id | uuid
created_at | timestamp without time zone
deleted_at | timestamp without time zone
(4 rows)
我也鼓励你检查这个线程
评论
\d
\df
\df some_function \gdesc
\d
\d
输出的实际子集\d
是的。通过将 ECHO-HIDDEN
设置为打开
引擎盖并扔掉任何您不喜欢的东西,只抓住您想要的东西。构建该输出的每个单独部分都可以自行正常工作。
-E
--echo-hidden
回显 和 其他反斜杠命令生成的实际查询。您可以使用它来研究 psql 的内部操作。这相当于将变量设置为 。\d
ECHO_HIDDEN
on
PostgreSQL不明白。它是 的内部元命令,它与其他任何客户端一样。您看到的数据是客户端发出一系列查询并将其输出粘合在一起的结果 - 通过上面的设置,您可以了解这些查询是什么。您可以“手动”使用它们,甚至可以重新排列它们以更好地满足您的目的。\d
psql
端子宽度
您可能需要查看扩展
模式。 提供多种输出格式可供选择:宽度可调。您还应该控制终端屏幕缓冲区布局的属性 - 在那里,您可以调高宽度,每当某些东西太宽时,您可以根据需要向右滚动,或者只是让它伸出屏幕外。psql
wrapped
columns
查询结构/架构
有符合 SQL 标准的 information_schema
命名空间,其中有列
视图。你可以直接去那里:
select column_name from information_schema.columns
where table_schema='public' and table_name='users';
该架构中的视图指向运行时获取表和视图的列列表的同一位置。实际数据位于直接查询的系统目录中。psql
\d
psql
直接使用系统目录pg_attribute:
SELECT
attname AS column
FROM
pg_attribute
WHERE
attrelid = 'users'::regclass
AND
attnum > 0;
pg_attribute
存储表(如表、索引、视图等)的列名。将表名转换为 needed for 。 消除系统列 、 、 等。'users'::regclass
oid
attrelid
attnum > 0
cmax
cmin
ctid
您可以使用 or 或任何其他不会换行的文本编辑器程序作为寻呼机:less -S
leafpad
tometzky=> \setenv PAGER 'less -S'
tometzky=> \setenv PAGER leafpad
或者,您可以查询信息架构以获取具有扩展输出的类似数据:
tometzky=> \x on
Expanded display is on.
tometzky=> select
column_name,
is_nullable,
data_type,
character_maximum_length
from information_schema.columns
where table_name='users' and table_schema=current_schema();
评论
less -S
评论