sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL BESKRIV TABELL Motsvarighet

Vissa DBMS som Oracle, MySQL och MariaDB har en DESCRIBE kommando som returnerar information om tabeller och vyer. Det går till DESCRIBE table där tabell är namnet på tabellen eller vyn, och den kan också följas av ett kolumnnamn om du bara vill ha information om en specifik kolumn.

PostgreSQL har ingen DESCRIBE TABLE kommandot som sådant, men det finns alternativ.

\d Kommando

Om du använder psql , ett snabbt sätt att returnera tabellinformation är med \d kommando. Detta kommando visar information om tabeller, vyer, materialiserade vyer, index, sekvenser eller främmande tabeller. Vi kan därför använda detta kommando som en DESCRIBE TABLE alternativ.

Syntax

Syntaxen ser ut så här:

\d[S+] [ pattern ]

Här, pattern kan vara namnet på tabellen (eller annat objekt) eller det kan vara ett reguljärt uttryck. Om \d används utan ett pattern argument, är det ekvivalent med \dtvmsE som visar en lista över alla synliga tabeller, vyer, materialiserade vyer, sekvenser och främmande tabeller.

Som standard visas endast användarskapade objekt, men du kan ange ett mönster eller S modifierare för att inkludera systemobjekt.

Exempel

Här är ett exempel på hur du använder \d för att returnera information om en tabell som heter actor :

\d public.actor

Resultat:

                                             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()

Kommandot returnerar också associerade index, begränsningar, regler och utlösare. För främmande tabeller visas också den associerade främmande servern.

Utökad information

Vi kan lägga till ett plustecken (+ ) för att avslöja utökad information, som inkluderar eventuella kommentarer associerade med tabellens kolumner, närvaron av OID i tabellen, vydefinitionen om relationen är en vy och en icke-standardinställning för replikidentitet och åtkomstmetodens namn om relationen har en åtkomstmetod.

Exempel:

\d+ public.actor

Resultat:

                                                                 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

Returnera endast specifika objekttyper

Som nämnts, if \d används utan ett pattern argument, är det ekvivalent med \dtvmsE som visar en lista över alla synliga tabeller, vyer, materialiserade vyer, sekvenser och främmande tabeller.

Vi kan lägga till vilken som helst av bokstäverna E , i , m , s , t och v , som står för främmande tabell, index, materialiserad vy, sekvens, tabell respektive vy. Vi kan specificera någon eller alla av dessa bokstäver, i valfri ordning, för att få en lista över objekt av dessa typer.

Här är ett exempel på att lägga till t för att begränsa data som returneras till bara tabeller:

\dt actor

Resultat:

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

Jokertecken

Här är ett exempel på att inkludera en jokerteckenoperator, så att alla tabeller som börjar med film returneras:

\dt film*

Resultat:

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

information_schema.columns Visa

Om du inte använder psql (och även om du är med psql ), så kan du alltid fråga information_schema.columns se. Denna vy kan användas för att returnera liknande information till vad vi skulle få med DESCRIBE table i andra 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';

Resultat:

+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+
| 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()                                   |
+-------------+-----------------------------+------------+--------------+-------------+-----------------------------------------+

Den här vyn innehåller många fler kolumner, och du kan lägga till/ta bort kolumner efter behov.

information_schema vyer är i stort sett standard i de flesta av de stora DBMS:erna, så vi kan fråga efter den här vyn i dessa DBMS:er också.


  1. Långsam migrering till molnet

  2. Lagring av UTF-16/Unicode-data i SQL Server

  3. Dela sträng efter avgränsningsposition med Oracle SQL

  4. MySQL och GROUP_CONCAT() maxlängd