你如何检查psql中的对象?

时间:2011-08-30 20:37:12

标签: sql database postgresql database-schema

我想检查来自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

1 个答案:

答案 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)