পোস্টগ্রেসে একটি অ্যারেতে কোয়েরির আউটপুট নির্বাচন করুন


88

আমার কোডটি হ'ল:

SELECT column_name
FROM information.SCHEMA.columns
WHERE table_name = 'aean'

এটি টেবিলের কলামের নাম ফেরত দেয় aean।
এখন আমি একটি অ্যারে ঘোষণা করেছি:

DECLARE colnames text[]

আমি কীভাবে কলমের নাম অ্যারে সিলেক্টের আউটপুট সংরক্ষণ করতে পারি।
কলোনাম আরম্ভ করার দরকার আছে কি?


+1, আমি ঠিক একই ত্রুটি বার্তাটি নিয়ে এখানে পৌঁছেছি - এরিআরআর: তথ্য টাইপ তথ্য_সেমি.এসএইচএল_ অ্যান্টিফায়ারের জন্য অ্যারে টাইপটি খুঁজে পাইনি। চেষ্টা করছিলামarray_agg(column_name, ',')
— জেরিমাউস

উত্তর:


151

দুটি উপায় আছে। একটি হল সমষ্টিগত:

SELECT array_agg(column_name::TEXT)
FROM information.schema.columns
WHERE table_name = 'aean'

অন্যটি হল অ্যারে নির্মাণকারী ব্যবহার করা:

SELECT ARRAY(
SELECT column_name 
FROM information.schema.columns 
WHERE table_name = 'aean')

আমি অনুমান করছি এটি পিএলপিএএসএসএল এর জন্য। সেক্ষেত্রে আপনি এটিকে এটি নির্ধারণ করতে পারেন:

colnames := ARRAY(
SELECT column_name
FROM information.schema.columns
WHERE table_name='aean'
);

আপনি কি আমাকে পোস্টগ্র্যাগে কাজ করে এমন কোডটি দিতে পারেন কারণ এটি
— পোস্টগ্র্রেস ইআরআরআর

সেটার জন্য দুঃখিত. মাইন্ডলেস অনুলিপি এবং পেস্ট করা অ্যারে_এগজি () তিনটি কলেই অন্তর্ভুক্ত। আপনার পিজি সংস্করণটিকে খুশি করতে আমি প্রাথমিকটি টাইপও করেছি।
— ডেনিস ডি বার্নার্ডি

9
কারও জন্য পিএলপ.জি.এস.এল.এল অংশ দেখার জন্য আপনি DECLAREএকটি অ্যারে হিসাবে my_array INTEGER[];(বা প্রাসঙ্গিক ধরণের যাই হোক না কেন) করতে পারেন। আপনি কোয়েরির WHEREক্লজে যেমন অ্যারে ব্যবহার করতে পারেন WHERE values = ANY(my_array)। ANYএকটি বিন্যাস বা একটি সেট লাগে এবং যে অ্যারের / সেট উপস্থিতি চেক করবে, তাই এটি equivalently কাজ IN ()একটি অর্থে
— user2490003

11

আমার সত্যিকার অর্থে একই সমস্যা ছিল। ডেনিস প্রদত্ত সমাধানটির আরও একটি কার্যকরী পরিবর্তন (ধরণটি অবশ্যই নির্দিষ্ট করতে হবে):

SELECT ARRAY(
SELECT column_name::text
FROM information_schema.columns
WHERE table_name='aean'
)

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