Обсуждение: finding UNIQUES in information_schema

Поиск
Список
Период
Сортировка

finding UNIQUES in information_schema

От
Gerardo Herzig
Дата:
Hi all. Im failing while trying to obtain some metainfo from
information_schema. Acording to the docs, constraint_column_usage and
key_column_usage views contains some information about constraints and
indexes.

See:                      Table "public.almatnov"  Column    |          Type          |           Modifiers
-------------+------------------------+--------------------------------formu       | integer                |alucod
| integer                | default 0codcarr     | character varying(3)   | default ''::character varyinganifm       |
charactervarying(2)   | default 20comentarios | text                   | default ''::text
 
Indexes:   "almatnov_alucod_codcarr_idx" UNIQUE, btree (alucod, codcarr)   "almatnov_codcarr_alucod" UNIQUE, btree
(alucod,codcarr)
 



And now:
ematerias=# SELECT * from information_schema.constraint_table_usage
where table_name='almatnov';table_catalog | table_schema | table_name | constraint_catalog |
constraint_schema | constraint_name
---------------+--------------+------------+--------------------+-------------------+-----------------
(0 rows)

ematerias=# SELECT * from information_schema.key_column_usage where
table_name='almatnov';constraint_catalog | constraint_schema | constraint_name |
table_catalog | table_schema | table_name | column_name |
ordinal_position | position_in_unique_constraint

--------------------+-------------------+-----------------+---------------+--------------+------------+-------------+------------------+-------------------------------
(0 rows)

1) Im a doing anything wrong?
2) It is safe to extract metainfo from pg_catalog?

Thanks!

Gerardo


Re: finding UNIQUES in information_schema

От
Tom Lane
Дата:
Gerardo Herzig <gherzig@fmed.uba.ar> writes:
> Hi all. Im failing while trying to obtain some metainfo from
> information_schema. Acording to the docs, constraint_column_usage and
> key_column_usage views contains some information about constraints and
> indexes.

No, they contain information about constraints, period.  How did you
create those indexes?  If you made them via SQL-standard PRIMARY KEY or
UNIQUE constraint syntax, they should show in the information_schema.
Otherwise not.
        regards, tom lane


Re: finding UNIQUES in information_schema

От
Gerardo Herzig
Дата:
Tom Lane wrote:
> Gerardo Herzig <gherzig@fmed.uba.ar> writes:
>> Hi all. Im failing while trying to obtain some metainfo from
>> information_schema. Acording to the docs, constraint_column_usage and
>> key_column_usage views contains some information about constraints and
>> indexes.
> 
> No, they contain information about constraints, period.  How did you
> create those indexes?  If you made them via SQL-standard PRIMARY KEY or
> UNIQUE constraint syntax, they should show in the information_schema.
> Otherwise not.
> 
>             regards, tom lane
> 
Well, i just dont get it. Official docs from 8.2 says:
"""The view key_column_usage identifies all columns in the current
database that are restricted by some *unique*, *primary key*, or foreign
key constraint. Check constraints are not included in this view. Only
those columns are shown that the current user has access to, by way of
being the owner or having some privilege.
"""

Well, damn, lets create some UNIQUE
edatos=# CREATE UNIQUE INDEX aluestud_alu_cod_anifm on aluestud (alucod,
codcarr1, anifm);
CREATE INDEX

edatos=#\d aluestud
[...]
Indexes:   "estud_idx1" PRIMARY KEY, btree (alucod, codcarr1)   "aluestud_alu_cod_anifm" UNIQUE, btree (alucod,
codcarr1,anifm)
 

And...
edatos=# select table_name, constraint_name, column_name from
information_schema.key_column_usage where table_name='aluestud';table_name | constraint_name | column_name
------------+-----------------+-------------aluestud   | estud_idx1      | alucodaluestud   | estud_idx1      |
codcarr1
(2 rows)

Damn, im that idiot? Or should i get the UNIQUE i have just defined also?



Re: finding UNIQUES in information_schema

От
Tom Lane
Дата:
Gerardo Herzig <gherzig@fmed.uba.ar> writes:
> Tom Lane wrote:
>> No, they contain information about constraints, period.  How did you
>> create those indexes?  If you made them via SQL-standard PRIMARY KEY or
>> UNIQUE constraint syntax, they should show in the information_schema.
>> Otherwise not.

> Well, i just dont get it.

No, apparently not.  The term "constraint" in this context has a very
specific meaning; it's talking about the CONSTRAINT syntax in CREATE
TABLE or ALTER TABLE.  This is per SQL specification.  Indexes are an
implementation detail that the standard doesn't concern itself with;
therefore anything you do with CREATE INDEX is outside the standard and
is not reflected in the standard-defined information_schema.
        regards, tom lane