නිශ්චිත වගුවක් සඳහා සියලු තීරු ලැයිස්තුගත කරන්නේ කෙසේද?


322

මා නොදන්නා දත්ත සමුදායක නිවැරදි තොරතුරු කොටසක් සොයමි.

එය තෙවන පාර්ශවීය නිෂ්පාදනයක් වන අතර, ඔවුන් සමහර ප්‍රශ්නවලට පිළිතුරු දීමට ප්‍රමාද වන අතර, එම ඩීබී තුළ දත්ත පවතින බව මම දනිමි, එබැවින් මට රෙට්රෝ ඉංජිනේරු විද්‍යාව ටිකක් කිරීමට අවශ්‍යය.

එක් වගුවක් ලබා දී ඇති විට, මෙම වගුව සඳහා තීරු වල නම් ලැයිස්තුවක් තිබිය හැකිද?

නිදසුනක් ලෙස SqlServer හි, නැවත භාවිතා කළ හැකි CREATEප්‍රකාශයකට වගුවක් දැමිය හැකිය , එමඟින් වගුව සමන්විත සියලුම තීරු පෙළ ලැයිස්තුගත කරයි.


ඔබට ඩීබී වෙත කුමන ආකාරයේ ප්‍රවේශයක් තිබේද?
ඩෙසෝ

@dezso, එය වෙනම යන්ත්‍රයක ඇත, නමුත් මට එයට පිවිසිය හැකි අතර පරිපාලක අයිතිවාසිකම් සහිතව psql විධාන රේඛාව දියත් කළ හැකිය
ස්ටීවන් රෝලන්ඩ්

6
මම ඔබව නිවැරදිව තේරුම් ගත්තා නම්, ඔබ පසුව \dt[+] table_nameපැමිණේ psql.
dezso

1
නෑ. \ dt + තීරුවල නම පැහැදිලිව පෙන්වන බවක් නොපෙනේ. එය එකතු කරන්නේ "විස්තර" ක්ෂේත්‍රයක් පමණි.
ස්ටීවන් රෝලන්ඩ්

13
නමුත් table d + වගුවේ නම ක්‍රියා කරයි!
ස්ටීවන් රෝලන්ඩ්

Answers:


386

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

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

සටහන: ඉහත උදාහරණයට අනුව, අගයන් උපුටා දැක්වීම් තුළ කොට ඇති බවට වග බලා ගන්න.


3
Psql හි, විමසුම් ප්‍රති results ල රේඛීයව ( ටැබුලර් වෙනුවට) භාවිතා කිරීම \x onහෝ \pset expanded onසෑදීම සඳහා stackoverflow.com/a/9605093/513397
anishpatel

4
වත්මන් අනුවාද වලදී (එය 9.6 දී උත්සාහ කර ඇත) \d+ public.*ඔබේ සියලු වගු සහ යෝජනා ක්‍රමයේ විස්තරය (ස්කීමා + අවිනිශ්චිත / fkeys / ප්‍රේරක) ලබා ගැනීමට ඔබට psql හි කළ හැකිය public. එක් එක් බැඳීම විසින් කරන ලද ඩීබී හි වෙනස්කම් පිළිබඳව සොයා බැලීමට අපි එය අපගේ පූර්ව-කැපවීමේ කොකු පිටපතෙහි භාවිතා කරමු.
තාලිස් කේ.

5
එකම තීරුව නම ලබා ගැනීමට column_name SELECT
ඇන්ඩෲ

91

අනෙක් පිළිතුරු සඳහා අතිරේකයක් ලෙස, පේළි කිසිවක් නොදෙන SELECT ප්‍රකාශයක් පවා ඔබට සහ යෙදුම් කේතයට තීරු නම් හෙළි කරයි.

select *
from table_name
where false;

මෙම ඕනෑම ප්‍රවේශයක් සමඟ අවසර ක්‍රියාත්මක විය හැකිය.


මම හිතන්නේ ඔබ අදහස් කරන්නේ මෙම SQL එක psql විධානය වෙත යොමු කිරීමයි. නිමැවුමේ විස්මයන් වළක්වා ගැනීම සඳහා --no-psqlrc විකල්පය භාවිතා කිරීමට මම යෝජනා කරමි.
ජෝන්මුඩ්

තෝරා ගැනීමට නියම කළ යුතු සැඟවුණු තීරු හැර (pg_class.oid වැනි)
okutane

76

මෙම තොරතුරු ක්රමානුරූපය මන්දගාමී සහ වග බලා ගන්න ක්රමයක් වන්නේ: එය සම්මත වන අතර එය සහාය දෙන බව වෙනත් දත්ත සමුදායන් විශාල වශයෙන් අතේ ගෙන යා හැකි. තවද එය ප්‍රධාන අනුවාදයන් හරහා දිගටම ක්‍රියා කරනු ඇත.

කෙසේ වෙතත්, අදහස් තොරතුරු ක්රමානුරූපය නිතර බොහෝ වගු තුළ සිට එක්වන පද්ධතිය නාමාවලි තදින්ම සම්මත ආකෘතිය හමුවීමට - බොහෝ විට පමණක් මළ භාණ්ඩ ප්රවාහන වන බොහෝ. මෙය ඔවුන් මන්දගාමී කරයි.
Postgres සංවර්ධකයින් පොරොන්දු ලබා දෙන්නේ නැත, නමුත් මූලික කරුණු (මෙහි අවශ්‍ය දේ වැනි) ප්‍රධාන අනුවාදයන් හරහා වෙනස් නොවේ.

psql(ස්වදේශීය විධාන රේඛා අතුරුමුහුණත) වේගවත් මංතීරුව ගෙන, ප්‍රභවය කෙලින්ම විමසයි. ඔබ psqlපරාමිතිය සමඟ-E ආරම්භ කරන්නේ නම් , බැක්ස්ලෑෂ් විධාන පිටුපස ඇති SQL \dදර්ශණය වේ. නැතහොත් \set ECHO_HIDDEN onpsql විධාන රේඛාවෙන්. එතැන් සිට ඔබේ ප්‍රශ්නයට පිළිතුරක් ගොඩනගා ගත හැකිය.

එක් වගුවක් ලබා දී ඇති විට, මෙම වගුව සඳහා තීරු වල නම් ලැයිස්තුවක් තිබිය හැකිද?

SELECT attrelid::regclass AS tbl
     , attname            AS col
     , atttypid::regtype  AS datatype
       -- more attributes?
FROM   pg_attribute
WHERE  attrelid = 'myschema.mytable'::regclass  -- table name, optionally schema-qualified
AND    attnum > 0
AND    NOT attisdropped
ORDER  BY attnum;

විමසීමටinformation_schema.columns වඩා වේගවත් . EXPLAIN ANALYZEඔබම බැලීමට උත්සාහ කරන්න . එක් වරක් බැලීම සඳහා තවමත් වැදගත් නැත. නමුත් විමසුමක / ශ්‍රිතයක භාවිතා කරන්නේ නම් එය බොහෝ වාරයක් පුනරාවර්තනය වේ.

දෘශ්‍යතාවයේ සියුම් වෙනස්කම් ද තිබේ. සවිස්තරාත්මක සංසන්දනය:


2
ඇත්ත වශයෙන්ම ඒ ආකාරයට ඔබ ඔබට පෙන්වන -Eඅතර psql වර්ග ප්‍රමාණය ලබා ගන්නේ කෙසේදැයි ජනතාවට පෙන්වයි.
ඉවාන් කැරොල්

8

psql PostgreSQL 11+ මත

ඔබ විමසුමක් මත තීරුව වර්ග සඳහා සොයන්නේ නම්, ඔබට භාවිතා කළ හැකි psqlගේ\gdesc

SELECT
    NULL AS zero,
    1 AS one,
    2.0 AS two,
    'three' AS three,
    $1 AS four,
    sin($2) as five,
    'foo'::varchar(4) as six,
    CURRENT_DATE AS now
\gdesc
 Column |         Type         
--------+----------------------
 zero   | text
 one    | integer
 two    | numeric
 three  | text
 four   | text
 five   | double precision
 six    | character varying(4)
 now    | date
(8 rows)

0

PostgreSQL පමණි

මෙය තරමක් හොකී වන නමුත් ඔබ හැකි කෙටිම SQL සොයන්නේ නම් තරඟකරුවෙකු විය හැකිය:

SELECT json_object_keys(to_json(json_populate_record(NULL::schema_name.table_name, '{}'::JSON)))

හෝ ඊටත් වඩා කෙටි (වගුවේ අවම වශයෙන් එක් පේළියක්වත් ඇතැයි උපකල්පනය කර)

SELECT json_object_keys(to_json((SELECT t FROM schema_name.table_name t LIMIT 1)))

ලැයිස්තුගත කිරීම ඇණවුම ආරක්ෂා කරයි. ඔබ ඇණවුම ගැන තැකීමක් නොකරන්නේ නම් සහ hstoreදිගුව ස්ථාපනය කර ඇත්නම් ඔබට ඊටත් වඩා කෙටි කළ හැකිය

SELECT skeys(hstore(NULL::schema_name.table_name))
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.