পোস্টগ্রিএসকিউএল "টেবিলে ডিজাইন করুন"


1854

DESCRIBE TABLEপোস্টগ্র্রেএসকিউএল-তে (পিএসএইচএল কমান্ড ব্যবহার করে) আপনি কীভাবে ওরাকলসের সমতুল্য সম্পাদন করবেন ?

উত্তর:


2820

এটি চেষ্টা করুন ( psqlকমান্ড-লাইন সরঞ্জামে):

\d+ tablename

আরও তথ্যের জন্য ম্যানুয়াল দেখুন ।


8
আমি মূলত ডিভিনিমুরের উত্তরটি গ্রহণ করেছি তবে আমি এটির থেকে আরও ভাল পছন্দ করি। এটি কেবল টেবিলের বর্ণনা দেয় না তবে এটি কলামের বিবরণ এবং কোনও ওআইডি থাকলে মেটাডেটাও দেখায়।
মিঃ মুশকরাত

27
+সত্যিই ছোঁ হয়, PostgresSQL 9 হিসাবে শুধুমাত্র দেখা গভীর বিবরণ দেয় যখন আপনাকে যা করতে \d+ table_name, বরং সহজ চেয়ে\d table_name
nessur

12
g d আপনি প্যাগ্রেএসকিউএল ৯.১ এ প্যাগএডমিনের মাধ্যমে আবেদন করলে কার্যকর হয় না, নীচে ভিনকোর উত্তর আরও কিছু ক্ষেত্রে প্রযোজ্য
হ্যালো_আরথ

12
psql -Eকার্যকর করা এসকিউএল \d+এবং একই রকম (পিএসকিএল প্রম্পটের বাইরে ব্যবহারের জন্য) পেতে সুবিধাজনক
বিএসবি

17
ত্রুটি: "নামের কোনও সম্পর্ক খুঁজে পাওয়া যায়নি"। এর অর্থ আপনাকে আপনার টেবিলের নামটি ডাবল উদ্ধৃতিতে মোড়ানো দরকার। স্পষ্টতই, পোস্টগ্রাগগুলি এগুলি ছাড়াই আপনার টেবিলের নামটি হ্রাস করবে এবং অতএব আপনার টেবিলটি খুঁজে পাবে না। আশা করি এটি এখানে আসা এবং এই সমস্যা আছে এমন অন্য যে কোনও ব্যক্তিকে সহায়তা করবে। :)
এমুরেল

742

PostgreSQL উপায় ছাড়াও (\ d 'কিছু' বা \ dt 'টেবিল' বা s ds 'অনুক্রম' এবং আরও কিছু)

এসকিউএল স্ট্যান্ডার্ড উপায়, এখানে প্রদর্শিত হিসাবে :

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

এটি অনেক ডিবি ইঞ্জিন দ্বারা সমর্থিত।


23
INFORMATION_SCHEMA.COLUMNS থেকে কলাম_নাম, ডাটা_ টাইপ, চরিত্র_ম্যাক্সিমাম_সামগ্রী নির্বাচন করুন table যেখানে টেবিলের নাম = 'টেবিল';
ডাঃ ব্যক্তি ব্যক্তি ২ য়

7
আপনি-d এর চেয়ে বেশি কার্যকর যখন আপনি কোনও প্রাক-8.4 পিএসএইচএল এবং একটি 8-পরবর্তী সার্ভারের সাথে আটকে থাকেন - command d কমান্ডটি বেমানান।
বেলডাজ

26
এছাড়াও এই আদেশটি রেডশিফ্টের বিপরীতে চলে, যেখানে \d+নেই। এটি সেরা উত্তর আইএমও
নিউ আলেকজান্দ্রিয়া

6
আশ্চর্যজনক, পোস্টগ্রাগের জন্য উত্সাহিত আমি স্কিমা নামটিও যুক্ত করব
ffflabs

3
এটি শুধুমাত্র সর্বনিম্ন তথ্য সহ কলামগুলি তালিকাভুক্ত করে। \ d + সারণীটির জন্য সম্পূর্ণ ডিডিএল দেয় যার মধ্যে রয়েছে: ডিফল্ট, নল্যাবিলিটি, নেক্সটাল, স্পষ্টতা, প্রাথমিক কী, বিদেশী কী, সূচক, চেক সীমাবদ্ধতা এবং অন্য সারণি থেকে এফকে।
bradw2k

70

আপনি যদি পিএসকিএল এর পরিবর্তে কোয়েরি থেকে এটি পেতে চান তবে আপনি ক্যাটালগ স্কিমাটি জিজ্ঞাসা করতে পারেন। এখানে একটি জটিল ক্যোয়ারী যা এটি করে:

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
;

এটি বেশ জটিল তবে এটি আপনাকে পোস্টগ্রিজ এসকিউএল সিস্টেম ক্যাটালগের শক্তি এবং নমনীয়তা প্রদর্শন করে এবং আপনাকে পিজি_ক্যাটালগ আয়ত্ত করার পথে যেতে হবে ;-)। কোয়েরিতে% s এর পরিবর্তন করতে ভুলবেন না। প্রথমটি স্কিমা এবং দ্বিতীয়টি সারণীর নাম।


3
এই ক্যোয়ারীটি এখানে আরও ভালভাবে দেখানো হয়েছে তারা নোট করে যে "\ ডি টেবিল"
ফ্ল্যাভিয়ান ভলকেন

3
এই সমাধানটির একটি সুবিধা হ'ল format_type()ধরণের সাথে সংযুক্ত যে কোনও সংশোধককে অন্তর্ভুক্ত করা হবে, যেমন numeric(6,2); তবে information_schema.columnsকেবলমাত্র বেস ধরণের প্রতিবেদন করবে numeric
এলি কলিন্স

3
আমি কীভাবে আকার থেকে ডেটা টাইপ করব? বলুন | চরিত্রের পার্থক্য (50) | 2 কলামে: | চরিত্রের পার্থক্য | 50 |
ivanceras

51

আপনি এটি একটি পিএসকিএল স্ল্যাশ কমান্ড দিয়ে করতে পারেন:

 \d myTable describe table

এটি অন্যান্য বস্তুর জন্যও কাজ করে:

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

সূত্র: FAQs.org


36

এর psql সমতুল্য DESCRIBE TABLEহয় \d table

আরও তথ্যের জন্য পোস্টগ্রিজ এসকিউএল ম্যানুয়ালটির পিএসকিএল অংশটি দেখুন।


2
এছাড়াও, পিএসকিএল ডাটাবেস বিক্রয় \c databasenameবরং use databasename(আমার মতো মাইএসকিউএল থেকে আগতদের জন্য :-))। \c databasenameপ্রথম ছাড়া , বার্তা এবং আরও কিছু \d tablenameউত্পাদন করে No relations found.
ভিল 5

27

এটি সমাধান হওয়া উচিত:

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

21

আপনি আগ্রহী সন্ধানের ধরণটির সাথে মেলে এমন টেবিলগুলি সন্ধান করার জন্য আপনি একটি \d *search pattern * তারকাচিহ্ন দিয়ে তৈরি করতে পারেন ।


এটি আমি সন্ধান করছিলাম - টেবিলগুলির একটি উপসেট কীভাবে বর্ণনা করা যায় । দ্রষ্টব্য, আমি এটিও পেয়েছি যে যদি আপনার টেবিলগুলিতে বড় হাতের অক্ষর থাকে তবে বাক্য গঠনটি হয় \d *"<SubString>"*। অর্থাৎ, ডাবল উদ্ধৃতিগুলি অবশ্যই তারকাচিহ্নের অভ্যন্তরে থাকতে হবে । যদিও আপনি যদি কেবল সারণীর তালিকা চান তবে আপনি ব্যবহার করতে চান\dt
র্যান্ডল

এটি সিকোয়েন্সগুলি এবং

15

\d+ <table_name>আপনি ইতিমধ্যে খুঁজে পাওয়া কমান্ড লাইন ছাড়াও , আপনি তথ্য_স্কিমার কলামগুলি ব্যবহার করে কলামের ডেটা সন্ধান করতে তথ্য-স্কিমা ব্যবহার করতে পারেন

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

9
FROM info_schema.columnsআমার জন্য কাজ করে নি আমাকে ব্যবহার করতে হয়েছিল from information_schema.columns, নিশ্চিত না যে এটি আপনার উত্তরটিতে টাইপো আছে বা আমার শেষের দিকে কিছু বাস্তবায়ন সমস্যা issue
user27874

14

নিম্নলিখিত এসকিউএল স্টেটমেন্ট ব্যবহার করুন

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

যদি আপনি tbl_name এবং কল_নাম প্রতিস্থাপন করেন তবে এটি নির্দিষ্ট করা কলম্বনের ডেটা টাইপ প্রদর্শন করে যা আপনি খুঁজছেন।


3
২০০৮ সালের এই উত্তরটি এটাই বলে।
কোয়ান্টিন

@ কোয়ান্টিন-উভয়ের মধ্যেই পার্থক্য রয়েছে..২০০ 2008 এর উপরে সমাধান পুরো টেবিলের জন্য কলাম_নাম, ডেটা_ টাইপ, চরিত্র_ম্যাক্সিমাম_ লেন্থ বর্ণনা করে। যেখানে আমার হিসাবে - উল্লিখিত সমাধান - কেবলমাত্র স্কিমা কলামের ডেটা ধরণ দেখায়। উভয় চালান এবং পরীক্ষা করুন। তারা উভয়ই আলাদা। সমস্যা সমাধানের বিভিন্ন উপায় এখানে সমস্ত সমাধান। ব্যবহারকারী বিভিন্ন কারণে এটি ব্যবহার করতে পারেন
মিঃ তানানকি

14

আপনি এটি ব্যবহার করতে পারেন:

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

8

ক্যোয়ারের এই প্রকরণটি (অন্যান্য উত্তরে ব্যাখ্যা করা) আমার পক্ষে কাজ করেছিল।

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

এটি বিশদে এখানে বর্ণিত হয়েছে: http://www.postgresqltorial.com/postgresql-describe-table/


7

ইন মাইএসকিউএল , TABLE_NAME বর্ণনা


ইন পোস্টগ্রি , \ ঘ 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

7

অন্য উত্তরের এসকিউএল কোয়েরি (যা দুর্দান্ত!) উন্নতি করতে এখানে একটি সংশোধিত ক্যোয়ারী দেওয়া হয়েছে। এতে অন্তর্ভুক্ত নাম, উত্তরাধিকার সম্পর্কিত তথ্য এবং এর উপাদান অংশগুলিতে বিভক্ত একটি ডেটা ধরণের (প্রকার, দৈর্ঘ্য, যথার্থতা, স্কেল) অন্তর্ভুক্ত রয়েছে। এটি বাদ পড়েছে এমন কলামগুলিও ফিল্টার করে (যা এখনও ডাটাবেসে বিদ্যমান)।

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
;

4

আপনি নীচের কোয়েরি ব্যবহার করেও পরীক্ষা করতে পারেন

Select * from schema_name.table_name limit 0;

উদাহরণস্বরূপ: আমার টেবিলটিতে 2 টি কলামের নাম এবং পিডাব্লুডি রয়েছে। নীচে স্ক্রীনশট দিচ্ছি।

চিত্র যুক্ত করা হচ্ছে

* পিজি অ্যাডমিন 3 ব্যবহার করা


কারণ প্যাগাডমিনকে নির্বাচন এবং মেটা ডেটা পাওয়ার স্ল্যাকটি আশা করা "সেরা অনুশীলন" নয়
মিকি পার্লস্টেইন

2

কোনও কলাম, টাইপ, কলামের সংশোধক, ইত্যাদির মতো কোনও সারণির বর্ণনা দেওয়ার সর্বোত্তম উপায়

\d+ tablename or \d tablename

1
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                        |

1
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

0

1) পোস্টগ্রিএসকিউএল PSQL ব্যবহার করে টেবিল ডিজাইন করুন

পিএসকিএল কমান্ড লাইন সরঞ্জামে, table d টেবিল_নাম বা \ d + টেবিল_নাম একটি টেবিলের কলামগুলিতে তথ্য খুঁজতে table

2) পোস্টগ্রিএসকিউএল তথ্য_সেমি ব্যবহার করে টেবিলটি ডিজাইন করুন

তথ্য_স্কেমি ডাটাবেসে কলামের নাম, ডাটাবেট, কলামের সারণির সর্বাধিক দৈর্ঘ্যের ক্যোয়ারী নির্বাচন করতে নির্বাচন করুন;

নির্বাচন করুন COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH INFORMATION_SCHEMA.COLUMNS থেকে যেখানে টেবিলের নাম = 'টেবিলের নাম';

আরও তথ্যের জন্য https://www.postgresqltutorial.com/postgresql-describe-table/


-1

/ dt হ'ল কমোড যা আপনাকে ডাটাবেসে উপস্থিত সমস্ত সারণী তালিকাবদ্ধ করে। ব্যবহার
/ ডি কমান্ড এবং / D + আমরা একটি টেবিল বিবরণ পেতে পারেন। সিসানট্যাক্সটি
* / d টেবিল_নাম (বা) + ডি + টেবিল_নামের মতো হবে


-3

টেবিল স্কিমা পাওয়ার জন্য আমি নিম্নলিখিত স্ক্রিপ্টটি নিয়ে কাজ করেছি।

'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;

||
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.