gpt4 book ai didi

sql - 你如何检查来自 psql 的对象?

转载 作者:搜寻专家 更新时间:2023-10-30 23:20:29 37 4
gpt4 key购买 nike

我想检查来自 psql 的索引(和其他对象)。

我创建了索引:

CREATE INDEX my_index on "my_table" (iso_country_code, type_name, UPPER(name) varchar_pattern_ops);

在 psql 中我使用了 describe 命令:

db=> \d+ my_index
Index "public.my_index"
Column | Type | Storage | Description
------------------+------------------------+----------+-------------
iso_country_code | character varying(3) | extended |
type_name | character varying(300) | extended |
pg_expression_3 | text | extended |
btree, for table "public.my_table"

索引最后一个字段中的表达式只表示 pg_expression_3。为什么表达式没有出现在 psql 输出中?

我可以使用 pg_dump 检索包含 CREATE INDEX 语句的表模式:

pg_dump --table my_table --schema-only my_db

最佳答案

这显然是 9.0 之前的行为,请查看 E.5. Release 9.0 :

  • Show definitions of index columns in \d index_name (Khee Chin)

    The definition is useful for expression indexes.

对于以前的版本,您仍然可以手动遍历 system catalogs 获取表达式并使用 pg_get_indexdef(index_oid, column_no, pretty_bool)功能,例如:

=> SELECT oid FROM pg_catalog.pg_class c WHERE c.relname LIKE 'my_index';
oid
-------
25240
(1 row)
=> SELECT attname, attnum FROM pg_attribute a WHERE a.attrelid = '25240';
attname | attnum
------------------+--------
iso_country_code | 1
type_name | 2
pg_expression_3 | 3
(3 rows)
=> SELECT pg_get_indexdef(25240, 3, true);
pg_get_indexdef
-----------------
upper(name)
(1 row)

关于sql - 你如何检查来自 psql 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7249503/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com