我想检查来自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
答案 0 :(得分:2)
这显然是9.0之前的行为,请看一下E.5. Release 9.0
:
在
\d index_name
(Khee Chin)中显示索引列的定义该定义对表达式索引很有用。
对于以前的版本,您仍然可以手动获取表达式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)