September 8, 2008

Аналог \dT в SQL (mustread!!!)

Очень полезная вещь, я считаю...

Перевод SQL equivalent to \dT с pgsql-general

Bram Kuijper для pgsql-general

Всем привет,

Если я хочу получить список типов (т.е., типов данных или перечислений), то я могу выпонить комманду '\dT' в клиенте PostgreSQL.

Однако, я, похоже, не могу выяснить альтернативу \dT комманды в SQL, т.е. как бы я мог получить список типов с помошью SQL скрипта.

Напимер, если я создаю свой собственный ENUM:
CREATE TYPE bird AS ENUM('duck','goose');
то, быстро просмотрев information schema не просто обнаружить где храниться это перечисление. Является ли information schema правильным местом для поиска? Какое SQL выражение мне нужно для получения определённых пользователем типов?

заранее спасибо,
Bram Kuijper

Pavel Stehule для Bram, pgsql-general

Привет

Bram Kuijper:
> Всем привет,
>
> Если я хочу получить список типов (т.е., типов данных или перечислений),
> то я могу выпонить комманду '\dT' в клиенте PostgreSQL.
>

запустите psql с -E параметром. И увидите все SQL запросы используемые для метакомманд.
[pavel@localhost ~]$ psql -E postgres
psql (8.4devel)
Type "help" for help.

postgres=# \dT
********* QUERY **********
SELECT n.nspname as "Schema",
pg_catalog.format_type(t.oid, NULL) AS "Name",
pg_catalog.obj_description(t.oid, 'pg_type') as "Description"
FROM pg_catalog.pg_type t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM
pg_catalog.pg_class c WHERE c.oid = t.typrelid))
AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid =
t.typelem AND el.typarray = t.oid)
AND pg_catalog.pg_type_is_visible(t.oid)
ORDER BY 1, 2;
**************************

List of data types
Schema | Name | Description
------------+-----------------------------+----------------------------
pg_catalog | abstime | absolute, limited-range date and time (Unix system time)
pg_catalog | aclitem | access control list
pg_catalog | "any" |
pg_catalog | anyarray |
pg_catalog | anyelement |

regards
Pavel Stehule

No comments:

Post a Comment