sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL DESCRIBE TABLE Ekvivalent

Některé DBMS jako Oracle, MySQL a MariaDB mají DESCRIBE příkaz, který vrací informace o tabulkách a pohledech. Jde DESCRIBE table kde tabulka je název tabulky nebo pohledu a může být také následován názvem sloupce, pokud chcete pouze informace o konkrétním sloupci.

PostgreSQL nemá DESCRIBE TABLE příkaz jako takový, ale existují alternativy.

\d Příkaz

Pokud používáte psql , rychlý způsob, jak vrátit informace o tabulce, je pomocí \d příkaz. Tento příkaz zobrazuje informace o tabulkách, pohledech, materializovaných pohledech, indexu, sekvencích nebo cizích tabulkách. Můžeme tedy tento příkaz použít jako DESCRIBE TABLE alternativa.

Syntaxe

Syntaxe vypadá takto:

\d[S+] [ pattern ]

Zde pattern může to být název tabulky (nebo jiného objektu) nebo to může být regulární výraz. Pokud \d se používá bez pattern argument, je ekvivalentní \dtvmsE který zobrazí seznam všech viditelných tabulek, pohledů, materializovaných pohledů, sekvencí a cizích tabulek.

Ve výchozím nastavení se zobrazují pouze objekty vytvořené uživatelem, ale můžete zadat vzor nebo S modifikátor pro zahrnutí systémových objektů.

Příklad

Zde je příklad použití \d vrátit informace o tabulce s názvem actor :

\d public.actor

Výsledek:

                                             Table "public.actor"
+-------------+-----------------------------+-----------+----------+-----------------------------------------+
|   Column    |            Type             | Collation | Nullable |                 Default                 |
+-------------+-----------------------------+-----------+----------+-----------------------------------------+
| actor_id    | integer                     |           | not null | nextval('actor_actor_id_seq'::regclass) |
| first_name  | character varying(45)       |           | not null |                                         |
| last_name   | character varying(45)       |           | not null |                                         |
| last_update | timestamp without time zone |           | not null | now()                                   |
+-------------+-----------------------------+-----------+----------+-----------------------------------------+
Indexes:
    "actor_pkey" PRIMARY KEY, btree (actor_id)
    "idx_actor_last_name" btree (last_name)
Referenced by:
    TABLE "film_actor" CONSTRAINT "film_actor_actor_id_fkey" FOREIGN KEY (actor_id) REFERENCES actor(actor_id) ON UPDATE CASCADE ON DELETE RESTRICT
Triggers:
    last_updated BEFORE UPDATE ON actor FOR EACH ROW EXECUTE FUNCTION last_updated()

Příkaz také vrátí související indexy, omezení, pravidla a spouštěče. U cizích tabulek je také zobrazen přidružený cizí server.

Rozšířené informace

Můžeme připojit znaménko plus (+ ) odhalit rozšířené informace, které zahrnují jakékoli komentáře spojené se sloupci tabulky, přítomnost OID v tabulce, definici pohledu, pokud je vztah pohledem, a nevýchozí nastavení identity repliky a název přístupové metody, pokud vztah má přístupovou metodu.

Příklad:

\d+ public.actor

Výsledek:

                                                                 Table "public.actor"
+-------------+-----------------------------+-----------+----------+-----------------------------------------+----------+--------------+-------------+
|   Column    |            Type             | Collation | Nullable |                 Default                 | Storage  | Stats target | Description |
+-------------+-----------------------------+-----------+----------+-----------------------------------------+----------+--------------+-------------+
| actor_id    | integer                     |           | not null | nextval('actor_actor_id_seq'::regclass) | plain    |              |             |
| first_name  | character varying(45)       |           | not null |                                         | extended |              |             |
| last_name   | character varying(45)       |           | not null |                                         | extended |              |             |
| last_update | timestamp without time zone |           | not null | now()                                   | plain    |              |             |
+-------------+-----------------------------+-----------+----------+-----------------------------------------+----------+--------------+-------------+
Indexes:
    "actor_pkey" PRIMARY KEY, btree (actor_id)
    "idx_actor_last_name" btree (last_name)
Referenced by:
    TABLE "film_actor" CONSTRAINT "film_actor_actor_id_fkey" FOREIGN KEY (actor_id) REFERENCES actor(actor_id) ON UPDATE CASCADE ON DELETE RESTRICT
Triggers:
    last_updated BEFORE UPDATE ON actor FOR EACH ROW EXECUTE FUNCTION last_updated()
Access method: heap

Vrátí pouze specifické typy objektů

Jak již bylo zmíněno, if \d se používá bez pattern argument, je ekvivalentní \dtvmsE který zobrazí seznam všech viditelných tabulek, pohledů, materializovaných pohledů, sekvencí a cizích tabulek.

Můžeme připojit libovolné z písmen E , i , m , s , t a v , což znamená cizí tabulka, index, materializovaný pohled, sekvence, tabulka a pohled. Můžeme zadat některá nebo všechna tato písmena v libovolném pořadí, abychom získali seznam objektů těchto typů.

Zde je příklad připojení t pro omezení vracených dat pouze na tabulky:

\dt actor

Výsledek:

          List of relations
+--------+-------+-------+----------+
| Schema | Name  | Type  |  Owner   |
+--------+-------+-------+----------+
| public | actor | table | postgres |
+--------+-------+-------+----------+

Zástupné znaky

Zde je příklad zahrnutí zástupného operátoru, aby všechny tabulky začínající film jsou vráceny:

\dt film*

Výsledek:

              List of relations
+--------+---------------+-------+----------+
| Schema |     Name      | Type  |  Owner   |
+--------+---------------+-------+----------+
| public | film          | table | postgres |
| public | film_actor    | table | postgres |
| public | film_category | table | postgres |
+--------+---------------+-------+----------+

information_schema.columns Zobrazit

Pokud nepoužíváte psql (a i když jste pomocí psql ), pak se můžete vždy dotazovat na information_schema.columns Pohled. Toto zobrazení lze použít k vrácení informací podobných těm, které bychom získali pomocí DESCRIBE table v jiných DBMS.

SELECT
    column_name,
    data_type,
    character_maximum_length AS max_length,
    character_octet_length AS octet_length,
    is_nullable,
    column_default
FROM
    information_schema.columns
WHERE
    table_schema = 'public' AND 
    table_name = 'actor';

Výsledek:

+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
| column_name |          data_type          | max_length | octet_length | is_nullable |             column_default              |
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
| actor_id    | integer                     |       NULL |         NULL | NO          | nextval('actor_actor_id_seq'::regclass) |
| first_name  | character varying           |         45 |          180 | NO          | NULL                                    |
| last_name   | character varying           |         45 |          180 | NO          | NULL                                    |
| last_update | timestamp without time zone |       NULL |         NULL | NO          | now()                                   |
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+

Toto zobrazení obsahuje mnohem více sloupců a podle potřeby můžete přidávat/odebírat sloupce.

information_schema pohledy jsou ve většině hlavních DBMS do značné míry standardní, a tak se na tento pohled můžeme dotazovat i v těchto DBMS.


  1. Použití databáze Oracle s CakePHP 2.0

  2. převést sériové číslo Excel Date na běžné datum

  3. Jak nastavit výstupní formát intervalu v PostgreSQL

  4. MySQL zkombinuje dva sloupce a přidá je do nového sloupce