سؤال

كيف يمكنك تنفيذ ما يعادل أوراكل DESCRIBE TABLE في كيو (باستخدام psql الأمر)?

هل كانت مفيدة؟

المحلول

جرب هذا (في psql أداة سطر الأوامر):

\d+ tablename

انظر دليل للحصول على مزيد من المعلومات.

نصائح أخرى

بالإضافة إلى كيو طريقة (\d 'شيء' أو \dt 'جدول' أو \ds 'سلسلة' وهلم جرا)

SQL القياسية طريقة ، كما هو مبين هنا:

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

انها مدعومة من قبل العديد من db محركات.

إذا كنت ترغب في الحصول عليه من الاستعلام بدلا من 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
;

انها معقدة جدا ولكنها لا تظهر لك قوة ومرونة كيو كتالوج النظام و يجب أن تحصل في طريقك إلى pg_catalog إتقان ;-).تأكد من تغيير من %s في الاستعلام.الأول هو المخطط الثاني هو اسم الجدول.

يمكنك أن تفعل ذلك مع psql مائل الأمر:

 \d myTable describe table

فإنه يعمل أيضا على الكائنات الأخرى:

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

المصدر: faqs.org

على psql ما يعادل DESCRIBE TABLE هو \d table.

ترى psql جزء من كيو دليل لمزيد من التفاصيل.

قد تفعل \d *search pattern * مع العلامات النجمية العثور على الجداول التي تتطابق مع نمط البحث كنت مهتما في.

بالإضافة إلى سطر الأوامر \d+ <table_name> وجدت بالفعل ، يمكن أيضا استخدام المعلومات-مخطط للبحث عن بيانات العمود باستخدام info_schema.الأعمدة

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

يمكنك استخدام هذا :

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

استخدام عبارة SQL التالية

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

إذا قمت باستبدال tbl_name و col_name ، فإنه يعرض نوع بيانات معين coloumn التي كنت تبحث عن.

يجب أن يكون هذا الحل:

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

هذا الاختلاف من الاستعلام (كما هو موضح في إجابات أخرى) عملت بالنسبة لي.

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

إنه هو موضح هنا في التفاصيل:http://www.postgresqltutorial.com/postgresql-describe-table/

في الخلية ووصف 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

تحسين على الإجابة استعلام SQL (والتي هي كبيرة!), هنا هو نسخة منقحة الاستعلام.كما يتضمن القيد أسماء الميراث المعلومات و البيانات أنواع اقتحام انها المكونة (نوع, طول, الدقة, الحجم).كما بتصفية الأعمدة التي تم إسقاط (التي لا تزال موجودة في قاعدة البيانات).

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;

Expmple :بلدي الجدول 2 الأعمدة اسم و pwd.إعطاء الصورة أدناه.

Adding image

*استخدام PG admin3

أفضل طريقة لوصف الجدول مثل العمود, النوع, المعدلات من الأعمدة ، إلخ.

\d+ tablename or \d tablename
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

/dt هو commad الذي يسرد لك جميع الجداول الموجودة في قاعدة البيانات.باستخدام
/د الأوامر و /د+ نتمكن من الحصول على تفاصيل الجدول.على sysntax سوف يكون مثل
* /د table_name (أو) \d+ table_name

عملت البرنامج النصي التالي من أجل الحصول على الجدول المخطط.

'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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top