मैं एक ही काम करने की कोशिश कर रहा हूं, सुनिश्चित करें कि एक प्रकार मौजूद है।
मैं --echo-hidden
(-E
) के विकल्प के साथ psql शुरू कर दिया और \dT
दर्ज किया गया:
$ psql -E
psql (9.1.9)
testdb=> \dT
********* QUERY **********
SELECT n.nspname as "Schema",
pg_catalog.format_type(t.oid, NULL) AS "Name",
pg_catalog.obj_description(t.oid, 'pg_type') as "Description"
FROM pg_catalog.pg_type t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid))
AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND pg_catalog.pg_type_is_visible(t.oid)
ORDER BY 1, 2;
**************************
List of data types
Schema | Name | Description
--------+------------------+-------------
public | errmsg_agg_state |
(1 row)
आप स्कीमा और search_path (मैं कर रहा हूँ) का उपयोग कर रहे हैं तो आप शायद pg_catalog.pg_type_is_visible(t.oid)
नियंत्रण रखने के लिए की आवश्यकता होगी। मुझे नहीं पता कि कहां कर रहे हैं, लेकिन वे मेरे मामले के लिए प्रासंगिक नहीं लग रहे थे। वर्तमान में उपयोग:
SELECT 1 FROM pg_catalog.pg_type as t
WHERE typname = 'mytype' AND pg_catalog.pg_type_is_visible(t.oid);
आप जानते हैं कि यदि आप अभी भी किसी तालिका द्वारा उपयोग किए जाते हैं तो आप किसी प्रकार को छोड़ या प्रतिस्थापित नहीं कर सकते हैं? –
यदि आप एक प्रकार के लेनदेन में ईआरआरओआर से बचना चाहते हैं, जिसे आपने पहले से ही असफल लेनदेन के पिछले प्रयास में बनाया है, तो आप सृजन वक्तव्य से पहले हमेशा डीआरपी टाइप कर सकते हैं। – Campa