এনামের কাছে থাকা সমস্ত মান পেতে এসকিউএল কোয়েরি


140

পোস্টগ্র্যাস্কেল কিছুদিন আগে এনাম সমর্থন পেয়েছিল।

CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);

এনোমগুলিতে একটি ক্যোয়ারির সাহায্যে নির্দিষ্ট করা সমস্ত মান আমি কীভাবে পাব?


আমি নীচের উত্তরগুলিও খুব সহায়ক পেয়েছি: stackoverflow.com/questions/9540681/list-postgres-enum-type
বেনামে কাপুরুষ

উত্তর:


264

আপনি যদি একটি অ্যারে চান:

SELECT enum_range(NULL::myenum)

আপনি যদি এনামের প্রতিটি আইটেমের জন্য পৃথক রেকর্ড চান:

SELECT unnest(enum_range(NULL::myenum))  

অতিরিক্ত তথ্য

আপনার এনওম ডিফল্ট স্কিমে না থাকলেও এই সমাধানটি প্রত্যাশার মতো কাজ করে। উদাহরণস্বরূপ, প্রতিস্থাপন myenumসঙ্গে myschema.myenum

উপরের ক্যোয়ারীতে প্রত্যাবর্তিত রেকর্ডগুলির ডেটা ধরণ হবে myenum। আপনি যা করছেন তার উপর নির্ভর করে আপনার পাঠ্যে কাস্ট করতে হবে। যেমন

SELECT unnest(enum_range(NULL::myenum))::text

আপনি যদি কলামের নামটি নির্দিষ্ট করতে চান তবে আপনি সংযোজন করতে পারেন AS my_col_name


জাস্টিন ওহমসকে কিছু অতিরিক্ত টিপস নির্দেশ করার জন্য ক্রেডিট, যা আমি আমার উত্তরে অন্তর্ভুক্ত করেছি।


1
এই উত্তর অনেক সংক্ষিপ্ত। দুর্দান্ত অবদান!
ডারিন পিটারসন 21

3
অযৌক্তিক কলটি "মেনিয়াম" এর কলামের নাম সহ মেনিয়াম টাইপের রেকর্ডগুলি ফিরিয়ে দেবে। আপনি এনামকে পাঠ্যে কাস্ট করতে এবং এর মতো কিছু যুক্ত করে একটি কলামের নাম নির্দিষ্ট করতে চাইতে পারেন। :: পাঠ্য হিসাবে আমার_ কলাম
জাস্টিন

1
এনাম কার্যকারিতা সম্পর্কে আরও জানতে আপনি এই লিঙ্কটি দেখতে পারেন postgresql.org/docs/8.3/static/function-enum.html postgresql.org/docs/9.2/static/function-array.html
বিকাশ বাসনেট

1
এর অর্থ কী NULL::?
সুং চ

1
@ ক্রিসল ধন্যবাদ এটা খুব অদ্ভুত লাগে। আমরা কেন পারি না SELECT enum_range(myenum)? কাস্টিং এর অর্থ কী null?
সুং চ

31

চেষ্টা করুন:

SELECT e.enumlabel
  FROM pg_enum e
  JOIN pg_type t ON e.enumtypid = t.oid
  WHERE t.typname = 'myenum'

1
যদি আপনার একাধিক স্কিমাতে একই এনাম থাকে তবে এটি কিছুটা সঙ্কুচিত হওয়ার প্রয়োজন হতে পারে। যদি এটি হয় তবে বিশদর জন্য postgresql.org/docs/current/static/catolog-pg-type.html দেখুন।
কেভ

1
আমি মনে করি আপনার একটি আন্ডারস্কোর দিয়ে 'মেনিয়াম' উপসর্গ করা দরকার। যদি আপনার এনাম মানগুলি প্রয়োজন হয় এবং আমার একাধিক স্কিমাতে এনাম নাম ব্যবহার করা যেতে পারে তবে আমার উত্তরটি দেখুন।
ডেভিড আন্ডারহিল

যদি গণনার ক্রমটি গুরুত্বপূর্ণ ORDER BY e.enumsortorderহয় তবে ক্যোয়ারীতে সংযোজন করুন । নতুন মানগুলি BEFOREবা ব্যবহার করে গণনা প্রকারের মধ্যে সন্নিবেশ করা থাকলে সম্ভবত গণনা করা মানগুলি যথাযথভাবে বাইরে থাকবে AFTER
ক্লিন্ট পাচল

5
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column

এটি "আপনার_কেনাম" টাইপের পাঠ্যের নামের একটি কলাম সহ এনাম "আপনার_ইনুম" এর সামগ্রীর একক কলাম ফলাফলের ফলাফল প্রদান করবে।


4

নিম্নলিখিত কোয়েরিটি ব্যবহার করে আপনি এনামের জন্য সমস্ত এনাম মান পেতে পারেন। ক্যোয়ারীটি আপনাকে এনামের কোন নেমস্পেসের মধ্যে বাছাই করতে দেয় (এনামটি একাধিক নেমস্পেসে সংজ্ঞায়িত করা হলে প্রয়োজনীয়; অন্যথায় আপনি কোয়েরির সেই অংশটি বাদ দিতে পারেন)।

SELECT enumlabel
FROM pg_enum
WHERE enumtypid=(SELECT typelem
                 FROM pg_type
                 WHERE typname='_myenum' AND
                 typnamespace=(SELECT oid
                               FROM pg_namespace
                               WHERE nspname='myschema'))

1
আপনি কী বোঝাতে চেয়েছিলেন যে এটি অ্যারে টাইপ? এটি আমার পক্ষে কাজ করে (PostgreSQL 9.0)।
ডেভিড আন্ডারহিল

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