তালিকা পোস্ট ENRE টাইপ


99

তালিকা ENUM ধরনের প্রস্তাব করা ক্যোয়ারী মহান। কিন্তু, এটা নিছক তালিকা schemaএবং typname। আমি কীভাবে প্রকৃত ENUM মান তালিকাভুক্ত করব? উদাহরণস্বরূপ, উপরের লিঙ্কিত উত্তরে আমি নীচের ফলাফলটি চাই

schema         type      values
-------------  --------  -------
communication  channels  'text_message','email','phone_call','broadcast'

উত্তর:


133
select n.nspname as enum_schema,  
       t.typname as enum_name,  
       e.enumlabel as enum_value
from pg_type t 
   join pg_enum e on t.oid = e.enumtypid  
   join pg_catalog.pg_namespace n ON n.oid = t.typnamespace

4
মিষ্টি ... string_agg(e.enumlabel, ', ') as enum_valueউপযুক্ত সঙ্গে ব্যবহার করা আরও ভাল GROUP BYs। অনেক ধন্যবাদ.
পাঞ্চিস 21

4
এটি হাস্যকর। কেন পৃথিবীতে কোন সংক্ষেপ নেই? (যদিও সমাধানের জন্য ধন্যবাদ!)
dpb

92

আপনি মাধ্যমে ডেটা টাইপ তালিকা করতে পারেন

\dT+ channels

https://www.postgresql.org/docs/current/static/app-psql.html#APP-PSQL-META-COMMANDS


@ অ্যালিসনআর আমি বিশ্বাস করি যে লেখক স্কয়ার সিনট্যাক্সের সন্ধান করছিলেন। এই উত্তরের সমাধানটি কেবল দেশীয় পোস্টগ্রিজ ক্লায়েন্ট ক্লায়েন্টের পক্ষে ভাল।
স্লাভা

71
select enum_range(enum_first(null::province),null::province);

11
মন্ত্রের মতো কাজ করেছে, অন্যের জন্য, 'প্রদেশ' হল এনাম টাইপের নাম :)
রানা দীপ

14
select unnest(enum_range(null, null::name_of_enum_type));প্রতি সারিতে একটি মান পেতে ব্যবহার করুন ।
ব্রায়ান এইচ

16
ধন্যবাদ! ডক্স অনুসারে আপনি পুরো ব্যাপ্তিটি চাইলে আপনার দুবার এটি পুনরাবৃত্তি করার দরকার নেই select enum_range(null::my_enum)postgresql.org/docs/9.5/static/function-enum.html
স্যাম ইটন

15

আমি সবসময় ভুলে যাই কীভাবে এটি করা যায়। অন্যান্য উত্তর এবং মন্তব্য অনুসারে, এখানে এটি একটি কমা-বিচ্ছিন্ন তালিকা। আমি কপি-পেস্ট স্নিপেটগুলি পছন্দ করি। সাহায্যের জন্য ধন্যবাদ:

select n.nspname as enum_schema,  
    t.typname as enum_name,
    string_agg(e.enumlabel, ', ') as enum_value
from pg_type t 
    join pg_enum e on t.oid = e.enumtypid  
    join pg_catalog.pg_namespace n ON n.oid = t.typnamespace
group by enum_schema, enum_name;


0

@ ডিপিবি:

আপনি যদি এর জন্য স্থায়ী সহজ অ্যাক্সেস পদ্ধতি তৈরি করতে চান তবে আপনি সর্বদা একটি দৃশ্য তৈরি করতে পারেন

CREATE OR REPLACE VIEW oublic.enumz AS 
 SELECT n.nspname AS enum_schema,
  t.typname AS enum_name,
  e.enumlabel AS enum_value
 FROM pg_type t
 JOIN pg_enum e ON t.oid = e.enumtypid
 JOIN pg_namespace n ON n.oid = t.typnamespace;

তারপরে আপনি সন্নিবেশ কমান্ডের জন্য একটি ট্রিগার তৈরি করতে পারেন।

উপরেরগুলি ভবিষ্যতের রেফারেন্সের উদ্দেশ্যে এটি ডাটাবেসে সংরক্ষণ করবে।


0

এটি সমস্ত এনাম-টাইপযুক্ত কলাম এবং তাদের সম্ভাব্য মানগুলি তালিকাভুক্ত করে :

SELECT
  table_schema || '.' || table_name || '.' || column_name as field_name,
  pg_enum.enumlabel as value
FROM pg_type
  JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid
  JOIN pg_namespace on pg_type.typnamespace = pg_namespace.oid
  JOIN information_schema.columns ON (information_schema.columns.udt_name = pg_type.typname AND information_schema.columns.udt_schema = pg_namespace.nspname)
WHERE pg_type.typtype = 'e'
ORDER BY field_name, pg_enum.enumsortorder;

0

অর্ডার যুক্ত করুন

SELECT
  n.nspname AS enum_schema,
  t.typname AS enum_name,
  e.enumlabel AS enum_value
FROM
  pg_type t
  JOIN pg_enum e ON t.oid = e.enumtypid
  JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
ORDER BY
  enum_name,
  e.enumsortorder;

-2

আপনার যদি টেবিল এবং কলামের নাম থাকে তবে (তবে নামটির নাম নয়) এটি ব্যবহার করুন:

SELECT pg_enum.enumlabel
FROM pg_type
 JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid
 JOIN information_schema.columns ON information_schema.columns.udt_name =
                                    pg_type.typname
WHERE pg_type.typtype = 'e' AND
      table_name = $1 AND column_name = $2 ORDER BY pg_enum.enumsortorder

আপনি যদি enum_rangeকোনও কলামে ব্যবহার করেন (অন্য ধরণের উত্তরগুলির বিপরীতে যা এটি ব্যবহার করে) এটি প্রতিটি সারিটির জন্য তথ্য ফিরিয়ে দেবে যা আপনি চান তা নয়। পরিবর্তে উপরের প্রশ্নটি ব্যবহার করুন।


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