PostgreSQL “වගුව විස්තර කරන්න”


Answers:


2829

මෙය උත්සාහ කරන්න ( psqlවිධාන රේඛා මෙවලමෙහි):

\d+ tablename

වැඩි විස්තර සඳහා අත්පොත බලන්න .


8
මම මුලින් ඩෙවින්මූර්ගේ පිළිතුර පිළිගෙන ඇති නමුත් මම මේකට වඩා හොඳට කැමතියි. එය වගුව විස්තර කරනවා පමණක් නොව, තීරු විස්තර කිරීම සහ OIDs තිබේ නම් පාර-දත්ත ද පෙන්වයි.
මස්ක‍්‍රට් මහතා

27
මෙම +ඇත්තටම PostgresSQL 9 පමණක් ඔබට එසේ අදහස් සඳහා ගැඹුරු විස්තරයක් ලබා දෙයි ලෙස, ක්ලච් ඇත \d+ table_nameවෙනුවට සරල වඩා,\d table_name
nessur

12
pgAdmin හරහා ඔබ PosgreSQL 9.1 හි ආයාචනා කරන විට එය ක්‍රියා නොකරයි, පහත දැක්වෙන වින්කෝගේ පිළිතුර තවත් අවස්ථා සඳහා අදාළ වේ
hello_earth

12
psql -Eක්‍රියාත්මක කරන \d+සහ ඒ හා සමාන වර්ගීකරණයක් ලබා ගැනීම පහසුය (psql
විමසුමට

17
දෝෂය: "නම් කර ඇති කිසිදු relation ාතියෙකු හමු නොවීය". මෙයින් අදහස් කරන්නේ ඔබ ඔබේ වගුවේ නම ද්විත්ව මිල ගණන් වලින් ඔතා ගත යුතු බවයි. පෙනෙන විදිහට, පෝස්ට්ග්‍රෙස් ඔබේ වගුවේ නම ඔවුන් නොමැතිව අඩු කරයි, එබැවින් ඔබේ වගුව සොයාගත නොහැක. මෙහි පැමිණ මෙම ගැටලුව ඇති වෙනත් ඕනෑම කෙනෙකුට මෙය උපකාරී වේ යැයි සිතමු. :)
amurrell

747

PostgreSQL ක්‍රමයට අමතරව (something d 'යමක්' හෝ \ dt 'වගුව' හෝ \ ds 'අනුක්‍රමය' සහ එසේ ය)

පෙන්වා ඇත ලෙස SQL සම්මත ආකාරයෙන්, මෙතන :

select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS where table_name = '<name of table>';

එයට බොහෝ ඩීබී එන්ජින් සහාය දක්වයි.


23
INFORMATION_SCHEMA.COLUMNS වෙතින් column_name = data_type, character_maximum_length තෝරන්න, එහිදී table_name = 'table';
වෛද්‍ය පුද්ගලයා II

7
ඔබ පෙර 8.4 psql හා පශ්චාත් 8.4 සේවාදායකයක් සමඟ සිරවී සිටින විට මෙය \ d ට වඩා ප්‍රයෝජනවත් වේ - command d විධානය නොගැලපේ.
බෙල්ඩාස්

28
එසේම මෙම විධානය RedShift ට එරෙහිව ක්‍රියාත්මක \d+වේ. IMO
New Alexandria

7
පුදුමාකාර, පෝස්ට්ග්‍රෙස් සඳහා ඇල්ටොට් මම යෝජනා ක්‍රමයේ නමද එක් කරමි
ffflabs

3
මෙය ලැයිස්තුගත කරන්නේ අවම තොරතුරු සහිත තීරු පමණි. table d + වගුව සඳහා සම්පූර්ණ ඩීඩීඑල් ලබා දෙයි: පෙරනිමි, ශුන්‍යතාව, ඊළඟ, නිරවද්‍යතාව, ප්‍රාථමික යතුර, විදේශීය යතුරු, දර්ශක, චෙක් අවහිරතා සහ අනෙකුත් වගු වලින් එෆ්.කේ.
bradw2k

71

ඔබට එය psql වෙනුවට විමසුමෙන් ලබා ගැනීමට අවශ්‍ය නම්, ඔබට නාමාවලි යෝජනා ක්‍රමය විමසිය හැකිය. එය කරන සංකීර්ණ විමසුමක් මෙන්න:

SELECT  
    f.attnum AS number,  
    f.attname AS name,  
    f.attnum,  
    f.attnotnull AS notnull,  
    pg_catalog.format_type(f.atttypid,f.atttypmod) AS type,  
    CASE  
        WHEN p.contype = 'p' THEN 't'  
        ELSE 'f'  
    END AS primarykey,  
    CASE  
        WHEN p.contype = 'u' THEN 't'  
        ELSE 'f'
    END AS uniquekey,
    CASE
        WHEN p.contype = 'f' THEN g.relname
    END AS foreignkey,
    CASE
        WHEN p.contype = 'f' THEN p.confkey
    END AS foreignkey_fieldnum,
    CASE
        WHEN p.contype = 'f' THEN g.relname
    END AS foreignkey,
    CASE
        WHEN p.contype = 'f' THEN p.conkey
    END AS foreignkey_connnum,
    CASE
        WHEN f.atthasdef = 't' THEN d.adsrc
    END AS default
FROM pg_attribute f  
    JOIN pg_class c ON c.oid = f.attrelid  
    JOIN pg_type t ON t.oid = f.atttypid  
    LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum  
    LEFT JOIN pg_namespace n ON n.oid = c.relnamespace  
    LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY (p.conkey)  
    LEFT JOIN pg_class AS g ON p.confrelid = g.oid  
WHERE c.relkind = 'r'::char  
    AND n.nspname = '%s'  -- Replace with Schema name  
    AND c.relname = '%s'  -- Replace with table name  
    AND f.attnum > 0 ORDER BY number
;

එය ඉතා සංකීර්ණ නමුත් එය ඔබට PostgreSQL පද්ධති නාමාවලියෙහි බලය සහ නම්‍යතාවය පෙන්වන අතර pg_catalog ප්‍රවීණත්වය කරා ඔබව ගෙන යා යුතුය ;-). විමසුමේ% s වෙනස් කිරීමට වග බලා ගන්න. පළමුවැන්න ස්කීමා වන අතර දෙවැන්න මේසයේ නමයි.


3
මෙම විමසුම වඩා හොඳ ඇත මෙතන ඔවුන් ද "\ ඈ මේසය" යෝජනා බවයි සටහන්
Flavien Volken

3
මෙම විසඳුමේ එක් වාසියක් නම් format_type(), වර්ගයට අනුයුක්ත කර ඇති ඕනෑම වෙනස් කිරීම් ඇතුළත් වේ, උදා numeric(6,2); ඇති ෙහයින්ද information_schema.columnsපමණක් පදනම වර්ගය වාර්තා කරනු ඇත numeric.
එලී කොලින්ස්

3
දත්ත වර්ගය ප්‍රමාණයෙන් බෙදන්නේ කෙසේද? කියන්න | අක්ෂරය වෙනස් වේ (50) | තීරු 2 සිට: | අක්ෂර වෙනස් | 50 |
ivanceras

52

ඔබට එය psql slash විධානයකින් කළ හැකිය:

 \d myTable describe table

එය වෙනත් වස්තූන් සඳහා ද ක්‍රියා කරයි:

 \d myView describe view
 \d myIndex describe index
 \d mySequence describe sequence

මුලාශ්‍රය: faqs.org


37

Psql ට සමාන DESCRIBE TABLEවේ \d table.

වැඩි විස්තර සඳහා PostgreSQL අත්පොතේ psql කොටස බලන්න.


2
එසේම, පද්දතියේ psql දත්ත selction වේ \c databasenameවඩා use databasenameමා වැනි MySQL සිට පැමිණෙන අය සඳහා (:-). \c databasenameපළමුවෙන් තොරව , පණිවිඩයක් \d tablenameනිපදවන No relations found.අතර ඊට වැඩි දෙයක් නැත.
විලේ

28

මෙය විසඳුම විය යුතුය:

SELECT * FROM information_schema.columns
WHERE table_schema = 'your_schema'
   AND table_name   = 'your_table'

22

ඔබ උනන්දුවක් දක්වන සෙවුම් රටාවට ගැලපෙන වගු සොයා ගැනීමට ඔබට \d *search pattern * තරු ලකුණු සමඟ කළ හැකිය.


මෙය මා සොයමින් සිටියේ - වගු උප කුලකයක් විස්තර කරන්නේ කෙසේද යන්නයි . ඔබේ වගු වල ලොකු අකුරක් තිබේ නම්, වාක්‍ය ඛණ්ඩය බව මම දනිමි \d *"<SubString>"*. එනම්, ද්විත්ව උපුටා දැක්වීම් තරු ලකුණු තුළ තිබිය යුතුය . ඔබට මේස ලැයිස්තුවක් අවශ්‍ය නම් ඔබට භාවිතා කිරීමට අවශ්‍යය\dt
රැන්ඩල්

මෙය අනුක්‍රම හා දර්ශක හා වගු සමඟ

16

\d+ <table_name>ඔබ දැනටමත් සොයාගෙන ඇති විධාන රේඛාවට අමතරව , info_schema.columns භාවිතා කරමින් තීරු දත්ත සොයා බැලීමට ඔබට තොරතුරු-යෝජනා ක්‍රමය භාවිතා කළ හැකිය.

SELECT *
FROM info_schema.columns
WHERE table_schema = 'your_schema'
AND table_name   = 'your_table'

9
FROM info_schema.columnsමා වෙනුවෙන් වැඩ නොකළේ මට භාවිතා කිරීමට සිදුවිය from information_schema.columns, එය ඔබේ පිළිතුරේ අක්ෂර වින්‍යාසයක් ද නැතිනම් මගේ අවසානයේ යම් ක්‍රියාත්මක කිරීමේ ගැටලුවක් ද යන්න විශ්වාස නැත.
user27874

15

පහත SQL ප්‍රකාශය භාවිතා කරන්න

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = 'tbl_name' 
AND COLUMN_NAME = 'col_name'

ඔබ tbl_name සහ col_name ආදේශ කරන්නේ නම්, එය ඔබ සොයන විශේෂිත කොලූම් වල දත්ත වර්ගය පෙන්වයි.


3
ඒ මොකක්ද මේ පිළිතුර 2008 සිට පවසයි.
ක්වෙන්ටින්

Ent ක්වෙන්ටින් - මේ දෙකෙහිම වෙනසක් ඇත. 2008 ඉහත විසඳුම මගින් මුළු වගුව සඳහා තීරු_ නාමය, දත්ත_ වර්ගය, අක්ෂර_ උපරිම_ දිග විස්තර කරයි. මගේ නම් - සඳහන් කළ විසඳුම - පෙන්වන්නේ ස්කීමා තීරුවේ දත්ත වර්ගය පමණි. දෙකම ධාවනය කර පරීක්ෂා කරන්න. ඔවුන් දෙදෙනාම වෙනස් ය. මෙහි ඇති සියලුම විසඳුම් ගැටළුවක් විසඳීමට විවිධ ක්‍රම වේ. පරිශීලකයාට විවිධ හේතු නිසා මෙය භාවිතා කළ හැකිය
තානන්කි මහතා

15

ඔබට මෙය භාවිතා කළ හැකිය:

SELECT attname 
FROM pg_attribute,pg_class 
WHERE attrelid=pg_class.oid 
AND relname='TableName' 
AND attstattarget <>0; 

9

විමසුමේ මෙම විචලනය (වෙනත් පිළිතුරු වලින් පැහැදිලි කර ඇති පරිදි) මට වැඩ කළේය.

SELECT
 COLUMN_NAME
FROM
 information_schema.COLUMNS
WHERE
 TABLE_NAME = 'city';

එය විස්තරාත්මකව මෙහි විස්තර කර ඇත: http://www.postgresqltutorial.com/postgresql-describe-table/


8

දී MySQL , table_name විස්තර


දී PostgreSQL , \ ඈ table_name


නැතහොත්, ඔබට මෙම දිගු විධානය භාවිතා කළ හැකිය:

SELECT
        a.attname AS Field,
        t.typname || '(' || a.atttypmod || ')' AS Type,
        CASE WHEN a.attnotnull = 't' THEN 'YES' ELSE 'NO' END AS Null,
        CASE WHEN r.contype = 'p' THEN 'PRI' ELSE '' END AS Key,
        (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid), '\'(.*)\'')
                FROM
                        pg_catalog.pg_attrdef d
                WHERE
                        d.adrelid = a.attrelid
                        AND d.adnum = a.attnum
                        AND a.atthasdef) AS Default,
        '' as Extras
FROM
        pg_class c 
        JOIN pg_attribute a ON a.attrelid = c.oid
        JOIN pg_type t ON a.atttypid = t.oid
        LEFT JOIN pg_catalog.pg_constraint r ON c.oid = r.conrelid 
                AND r.conname = a.attname
WHERE
        c.relname = 'tablename'
        AND a.attnum > 0

ORDER BY a.attnum

8

අනෙක් පිළිතුරේ SQL විමසුම වැඩිදියුණු කිරීම සඳහා (එය විශිෂ්ටයි!), මෙහි සංශෝධිත විමසුමකි. එයට අවහිරතා නම්, උරුම තොරතුරු, සහ එහි සං parts ටක කොටස් වලට බෙදී ඇති දත්ත වර්ග (වර්ගය, දිග, නිරවද්‍යතාව, පරිමාණය) ඇතුළත් වේ. එය අතහැර දැමූ තීරු ද පෙරහන් කරයි (ඒවා තවමත් දත්ත සමුදායේ පවතී).

SELECT
    n.nspname as schema,
    c.relname as table,
    f.attname as column,  
    f.attnum as column_id,  
    f.attnotnull as not_null,
    f.attislocal not_inherited,
    f.attinhcount inheritance_count,
    pg_catalog.format_type(f.atttypid,f.atttypmod) AS data_type_full,
    t.typname AS data_type_name,
    CASE  
        WHEN f.atttypmod >= 0 AND t.typname <> 'numeric'THEN (f.atttypmod - 4) --first 4 bytes are for storing actual length of data
    END AS data_type_length, 
    CASE  
        WHEN t.typname = 'numeric' THEN (((f.atttypmod - 4) >> 16) & 65535)
    END AS numeric_precision,   
    CASE  
        WHEN t.typname = 'numeric' THEN ((f.atttypmod - 4)& 65535 )
    END AS numeric_scale,       
    CASE  
        WHEN p.contype = 'p' THEN 't'  
        ELSE 'f'  
    END AS is_primary_key,  
    CASE
        WHEN p.contype = 'p' THEN p.conname
    END AS primary_key_name,
    CASE  
        WHEN p.contype = 'u' THEN 't'  
        ELSE 'f'
    END AS is_unique_key,
    CASE
        WHEN p.contype = 'u' THEN p.conname
    END AS unique_key_name,
    CASE
        WHEN p.contype = 'f' THEN 't'
        ELSE 'f'
    END AS is_foreign_key,
    CASE
        WHEN p.contype = 'f' THEN p.conname
    END AS foreignkey_name,
    CASE
        WHEN p.contype = 'f' THEN p.confkey
    END AS foreign_key_columnid,
    CASE
        WHEN p.contype = 'f' THEN g.relname
    END AS foreign_key_table,
    CASE
        WHEN p.contype = 'f' THEN p.conkey
    END AS foreign_key_local_column_id,
    CASE
        WHEN f.atthasdef = 't' THEN d.adsrc
    END AS default_value
FROM pg_attribute f  
    JOIN pg_class c ON c.oid = f.attrelid  
    JOIN pg_type t ON t.oid = f.atttypid  
    LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum  
    LEFT JOIN pg_namespace n ON n.oid = c.relnamespace  
    LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY (p.conkey)  
    LEFT JOIN pg_class AS g ON p.confrelid = g.oid  
WHERE c.relkind = 'r'::char  
    AND f.attisdropped = false
    AND n.nspname = '%s'  -- Replace with Schema name  
    AND c.relname = '%s'  -- Replace with table name  
    AND f.attnum > 0 
ORDER BY f.attnum
;

5

පහත විමසුම භාවිතයෙන්ද ඔබට පරීක්ෂා කළ හැකිය

Select * from schema_name.table_name limit 0;

පැහැදිලි කරන්න: මගේ වගුවේ තීරු 2 ක නමක් සහ pwd ඇත. තිර රුව පහතින් ලබා දීම.

රූපය එකතු කිරීම

* PG admin3 භාවිතා කිරීම


මෙගා දත්ත ලබා ගැනීමේ මන්දගාමී බව pgadmin තෝරා ගැනීම සහ අපේක්ෂා කිරීම "හොඳම පුහුණුව" නොවන නිසා
මිකී පර්ල්ස්ටයින්

3

තීරුවක්, වර්ගය, තීරු වෙනස් කිරීම වැනි වගුවක් විස්තර කිරීමට හොඳම ක්‍රමය.

\d+ tablename or \d tablename

3

PostgreSQL හි වගුව විස්තර කිරීමට බොහෝ ක්‍රම තිබේ

සරල පිළිතුර නම්

    > /d <table_name> -- OR

    > /d+ <table_name>

භාවිතය

ඔබ Postgres shell හි [ psql] නම් සහ ඔබට වගු විස්තර කිරීමට අවශ්‍ය නම්

විමසුම මඟින් ඔබට මෙය සාක්ෂාත් කරගත හැකිය [බොහෝ මිතුරන් නිවැරදි මාර්ග පළ කර ඇති බැවින්]

යෝජනා ක්‍රමය පිළිබඳ බොහෝ තොරතුරු පෝස්ට්ග්‍රෙස්ගේ පෙරනිමි වගු නම් වලින් ලබා ගත හැකිය information_schema. සරල SQL ප්‍රකාශයක් භාවිතා කර ඕනෑම වගුවක තොරතුරු ලබා ගැනීමට ඔබට එය කෙලින්ම භාවිතා කළ හැකිය.

පහසු විමසුම

    SELECT
      *
    FROM
      information_schema.columns
    WHERE
      table_schema = 'your_schema' AND
      table_name   = 'your_table';

මධ්‍යම විමසුම

  SELECT
      a.attname AS Field,
      t.typname || '(' || a.atttypmod || ')' AS Type,
      CASE WHEN a.attnotnull = 't' THEN 'YES' ELSE 'NO' END AS Null,
      CASE WHEN r.contype = 'p' THEN 'PRI' ELSE '' END AS Key,
      (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid), '\'(.*)\'')
              FROM
                      pg_catalog.pg_attrdef d
              WHERE
                      d.adrelid = a.attrelid
                      AND d.adnum = a.attnum
                      AND a.atthasdef) AS Default,
      '' as Extras
  FROM
        pg_class c 
        JOIN pg_attribute a ON a.attrelid = c.oid
        JOIN pg_type t ON a.atttypid = t.oid
        LEFT JOIN pg_catalog.pg_constraint r ON c.oid = r.conrelid 
                AND r.conname = a.attname
  WHERE
        c.relname = 'tablename'
        AND a.attnum > 0

  ORDER BY a.attnum

ඔබට අවශ්‍ය වන්නේ එය ප්‍රතිස්ථාපනය කිරීමයි tablename.

දෘ qu විමසුම

  SELECT  
      f.attnum AS number,  
      f.attname AS name,  
      f.attnum,  
      f.attnotnull AS notnull,  
      pg_catalog.format_type(f.atttypid,f.atttypmod) AS type,  
      CASE  
          WHEN p.contype = 'p' THEN 't'  
          ELSE 'f'  
      END AS primarykey,  
      CASE  
          WHEN p.contype = 'u' THEN 't'  
          ELSE 'f'
      END AS uniquekey,
      CASE
          WHEN p.contype = 'f' THEN g.relname
      END AS foreignkey,
      CASE
          WHEN p.contype = 'f' THEN p.confkey
      END AS foreignkey_fieldnum,
      CASE
          WHEN p.contype = 'f' THEN g.relname
      END AS foreignkey,
      CASE
          WHEN p.contype = 'f' THEN p.conkey
      END AS foreignkey_connnum,
      CASE
          WHEN f.atthasdef = 't' THEN d.adsrc
      END AS default
  FROM pg_attribute f  
      JOIN pg_class c ON c.oid = f.attrelid  
      JOIN pg_type t ON t.oid = f.atttypid  
      LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum  
      LEFT JOIN pg_namespace n ON n.oid = c.relnamespace  
      LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY (p.conkey)  
      LEFT JOIN pg_class AS g ON p.confrelid = g.oid  
  WHERE c.relkind = 'r'::char  
      AND n.nspname = 'schema'  -- Replace with Schema name  
      AND c.relname = 'tablename'  -- Replace with table name  
      AND f.attnum > 0 ORDER BY number;

වගුව විස්තර කිරීම සඳහා ඔබට ඉහත ඕනෑම ක්‍රමයක් තෝරා ගත හැකිය.

මාර්ග වැඩිදියුණු කිරීම සඳහා ඔබෙන් ඕනෑම කෙනෙකුට මෙම පිළිතුරු සංස්කරණය කළ හැකිය. ඔබගේ වෙනස්කම් ඒකාබද්ධ කිරීමට මම විවෘතව සිටිමි. :)


2
Use this command 

\d table name

like 

\d queuerecords

             Table "public.queuerecords"
  Column   |            Type             | Modifiers
-----------+-----------------------------+-----------
 id        | uuid                        | not null
 endtime   | timestamp without time zone |
 payload   | text                        |
 queueid   | text                        |
 starttime | timestamp without time zone |
 status    | text                        |

2
In postgres \d is used to describe the table structure.
e.g. \d schema_name.table_name;
this command will provide you the basic info of table such as, columns, type and modifiers.

If you want more info about table use
\d+ schema_name.table_name;
this will give you extra info such as, storage, stats target and description

1

1) psql භාවිතා කරමින් PostgreSQL වගුව විස්තර කරන්න

Psql විධාන රේඛා මෙවලමක, table d table_name හෝ table d + table_name වගුවක තීරු පිළිබඳ තොරතුරු සොයා ගැනීමට

2) තොරතුරු_චේමා භාවිතා කරමින් PostgreSQL වගුව විස්තර කරන්න

තොරතුරු_චේමා දත්ත ගබඩාවේ තීරු_ නාම, දත්ත සමුදාය, තීරු වගුවේ උපරිම දිග විමසීමට ප්‍රකාශය තෝරන්න;

INFORMATION_SCHEMA.COLUMNS වෙතින් COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH තෝරන්න, එහිදී table_name = 'tablename';

වැඩි විස්තර සඳහා https://www.postgresqltutorial.com/postgresql-describe-table/


0

/ dt යනු දත්ත සමුදායක ඇති සියලුම වගු ලැයිස්තුගත කරන කොමාඩ් ය.
/ d විධානය සහ / d + භාවිතා කරමින් අපට වගුවක විස්තර ලබා ගත හැකිය. සිස්ටැක්ස්
* / d table_name (හෝ) \ d + table_name හා සමාන වේ


-2

වගු ක්‍රමෝපාය ලබා ගැනීම සඳහා මම පහත පිටපත සකස් කළෙමි.

'CREATE TABLE ' || 'yourschema.yourtable' || E'\n(\n' ||
array_to_string(
array_agg(
'    ' || column_expr
)
, E',\n'
) || E'\n);\n'
from
(
SELECT '    ' || column_name || ' ' || data_type || 
coalesce('(' || character_maximum_length || ')', '') || 
case when is_nullable = 'YES' then ' NULL' else ' NOT NULL' end as column_expr
FROM information_schema.columns
WHERE table_schema || '.' || table_name = 'yourschema.yourtable'
ORDER BY ordinal_position
) column_list;

||
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.