DESCRIBE TABLE
PostgreSQL හි (psql විධානය භාවිතා කරමින්) ඔරකල් වලට සමාන ප්රමාණයක් ඔබ කරන්නේ කෙසේද ?
DESCRIBE TABLE
PostgreSQL හි (psql විධානය භාවිතා කරමින්) ඔරකල් වලට සමාන ප්රමාණයක් ඔබ කරන්නේ කෙසේද ?
Answers:
+
ඇත්තටම PostgresSQL 9 පමණක් ඔබට එසේ අදහස් සඳහා ගැඹුරු විස්තරයක් ලබා දෙයි ලෙස, ක්ලච් ඇත \d+ table_name
වෙනුවට සරල වඩා,\d table_name
psql -E
ක්රියාත්මක කරන \d+
සහ ඒ හා සමාන වර්ගීකරණයක් ලබා ගැනීම පහසුය (psql
PostgreSQL ක්රමයට අමතරව (something d 'යමක්' හෝ \ dt 'වගුව' හෝ \ ds 'අනුක්රමය' සහ එසේ ය)
පෙන්වා ඇත ලෙස SQL සම්මත ආකාරයෙන්, මෙතන :
select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS where table_name = '<name of table>';
එයට බොහෝ ඩීබී එන්ජින් සහාය දක්වයි.
\d+
වේ. IMO
ඔබට එය 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 වෙනස් කිරීමට වග බලා ගන්න. පළමුවැන්න ස්කීමා වන අතර දෙවැන්න මේසයේ නමයි.
format_type()
, වර්ගයට අනුයුක්ත කර ඇති ඕනෑම වෙනස් කිරීම් ඇතුළත් වේ, උදා numeric(6,2)
; ඇති ෙහයින්ද information_schema.columns
පමණක් පදනම වර්ගය වාර්තා කරනු ඇත numeric
.
ඔබට එය psql slash විධානයකින් කළ හැකිය:
\d myTable describe table
එය වෙනත් වස්තූන් සඳහා ද ක්රියා කරයි:
\d myView describe view
\d myIndex describe index
\d mySequence describe sequence
මුලාශ්රය: faqs.org
Psql ට සමාන DESCRIBE TABLE
වේ \d table
.
වැඩි විස්තර සඳහා PostgreSQL අත්පොතේ psql කොටස බලන්න.
\c databasename
වඩා use databasename
මා වැනි MySQL සිට පැමිණෙන අය සඳහා (:-). \c databasename
පළමුවෙන් තොරව , පණිවිඩයක් \d tablename
නිපදවන No relations found.
අතර ඊට වැඩි දෙයක් නැත.
ඔබ උනන්දුවක් දක්වන සෙවුම් රටාවට ගැලපෙන වගු සොයා ගැනීමට ඔබට \d *search pattern *
තරු ලකුණු සමඟ කළ හැකිය.
\d *"<SubString>"*
. එනම්, ද්විත්ව උපුටා දැක්වීම් තරු ලකුණු තුළ තිබිය යුතුය . ඔබට මේස ලැයිස්තුවක් අවශ්ය නම් ඔබට භාවිතා කිරීමට අවශ්යය\dt
\d+ <table_name>
ඔබ දැනටමත් සොයාගෙන ඇති විධාන රේඛාවට අමතරව , info_schema.columns භාවිතා කරමින් තීරු දත්ත සොයා බැලීමට ඔබට තොරතුරු-යෝජනා ක්රමය භාවිතා කළ හැකිය.
SELECT *
FROM info_schema.columns
WHERE table_schema = 'your_schema'
AND table_name = 'your_table'
FROM info_schema.columns
මා වෙනුවෙන් වැඩ නොකළේ මට භාවිතා කිරීමට සිදුවිය from information_schema.columns
, එය ඔබේ පිළිතුරේ අක්ෂර වින්යාසයක් ද නැතිනම් මගේ අවසානයේ යම් ක්රියාත්මක කිරීමේ ගැටලුවක් ද යන්න විශ්වාස නැත.
පහත SQL ප්රකාශය භාවිතා කරන්න
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tbl_name'
AND COLUMN_NAME = 'col_name'
ඔබ tbl_name සහ col_name ආදේශ කරන්නේ නම්, එය ඔබ සොයන විශේෂිත කොලූම් වල දත්ත වර්ගය පෙන්වයි.
විමසුමේ මෙම විචලනය (වෙනත් පිළිතුරු වලින් පැහැදිලි කර ඇති පරිදි) මට වැඩ කළේය.
SELECT
COLUMN_NAME
FROM
information_schema.COLUMNS
WHERE
TABLE_NAME = 'city';
එය විස්තරාත්මකව මෙහි විස්තර කර ඇත: http://www.postgresqltutorial.com/postgresql-describe-table/
දී 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
අනෙක් පිළිතුරේ 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
;
පහත විමසුම භාවිතයෙන්ද ඔබට පරීක්ෂා කළ හැකිය
Select * from schema_name.table_name limit 0;
පැහැදිලි කරන්න: මගේ වගුවේ තීරු 2 ක නමක් සහ pwd ඇත. තිර රුව පහතින් ලබා දීම.
* PG admin3 භාවිතා කිරීම
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;
වගුව විස්තර කිරීම සඳහා ඔබට ඉහත ඕනෑම ක්රමයක් තෝරා ගත හැකිය.
මාර්ග වැඩිදියුණු කිරීම සඳහා ඔබෙන් ඕනෑම කෙනෙකුට මෙම පිළිතුරු සංස්කරණය කළ හැකිය. ඔබගේ වෙනස්කම් ඒකාබද්ධ කිරීමට මම විවෘතව සිටිමි. :)
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 |
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) 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/
වගු ක්රමෝපාය ලබා ගැනීම සඳහා මම පහත පිටපත සකස් කළෙමි.
'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;