Как вы исследуете объекты из PSQL? - PullRequest
1 голос
/ 31 августа 2011

Я хочу изучить индекс (и другие объекты) из psql.

Я создал индекс с:

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

В psql я использовал команду описать:

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?

Я могу получить схему таблицы, включая операторы CREATE INDEX, используя pg_dump:

pg_dump --table my_table --schema-only my_db

1 Ответ

2 голосов
/ 31 августа 2011

Это явно до 9.0 поведения, взгляните на E.5. Release 9.0:

  • Показать определения столбцов индекса в \d index_name (Хи Чин)

    Определение полезно для индексов выражений.

Для предыдущих версий вы все еще можете получить выражение вручную, пройдя по системным каталогам и используя функцию 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...