ম্যাজিক কলাম "নাম" কোথা থেকে এসেছে?


11

আমি দুর্ঘটনাক্রমে এটি পেয়েছি:

db=> select name from site;
ERROR:  column "name" does not exist
LINE 1: select name from site;
               ^
db=> select site.name from site;
     name
---------------
 (1,mysitename)
(1 row)

দ্বিতীয় ক্যোয়ারিতে পুরো সারি থাকা একটি টুপল ফেরত দেয় return পোস্টগ্রিজ 9.0.1 ব্যবহার করে।

সম্পাদনা করুন: অনুরোধ দ্বারা সাইটের সংজ্ঞা। আমি সত্যিই কিছু যায় আসে না, এই ছটফট কোনও টেবিলের জন্য কাজ করে।

db=> \d site
                         Table "public.site"
 Column |  Type   |                     Modifiers
--------+---------+---------------------------------------------------
 id     | integer | not null default nextval('site_id_seq'::regclass)
 title  | text    | not null

এটি সংজ্ঞাটি প্রদর্শন করতে সহায়তা করবে site
পিটার আইসেন্ট্রাট

~ এটা করে ব্যাপার কারণ এখন আমরা দেখতে পারি না "নাম" মধ্যে নেই siteদিয়ে শুরু করতে। আপনি যে কলামটির অস্তিত্ব নেই তার জন্য কেন জিজ্ঞাসা করবেন?
jcolebrand

1
চেষ্টা করুন select site from site- এটি আপনাকে
গাইয়াসের

উত্তর:


11

NAMEআসলে একটি ফাংশন । এটি পোস্টগ্রিসের এমন এক গৌরব যা একটি যুক্তি উদাহরণ সহ একটি ফাংশন function(arg)হিসাবেও ডাকা যেতে পারে arg.function। ডক্স থেকে:

ফাংশনাল স্বরলিপি এবং বৈশিষ্ট্য স্বরলিপি মধ্যে সমতা "গণিত ক্ষেত্র" অনুকরণ করার জন্য যৌগিক ধরণের ফাংশন ব্যবহার করা সম্ভব করে তোলে।

NAMEঅবজেক্ট নামের জন্য একটি অভ্যন্তরীণ প্রকার , এবং এই ফাংশনটি তার প্রকারের পক্ষে তার যুক্তিটি type টাইপের মধ্যে ফেলেছে এবং এটি ফিরিয়ে দিচ্ছে।


ধন্যবাদ, আমি এটা জানতাম না। আমাকে কী বিরক্ত করে, যদি এই নির্দিষ্ট ফাংশন "নাম" কোথাও নথিভুক্ত করা হয়?
হেগমন

আমার উত্তর আপডেট করেছে
গাইউস

2
আরও স্পষ্টভাবে, rowটাইপটি কাস্ট করা হচ্ছে textকারণ এটি ফাংশনের ইনপুট টাইপ namenameফাংশন তারপর রূপান্তর করা হয় (না ভোটদান) টাইপ ইনপুট স্ট্রিং name(এটিও 64 বাইট ছিন্ন এর পার্শ্ব প্রতিক্রিয়া হবে)
জ্যাক topanswers.xyz চেষ্টা বলছেন

3

এছাড়াও মনে রাখবেন যে নামকরণের অন্তর্নিহিত কাস্ট পোস্টগ্র্রেএসকিউএল 8.3 এ সরানো হয়েছে যার অর্থ এই আচরণটি আর কাজ করে না। পোস্টগ্র্রেএসকিউএল ৮.৩ এবং তার চেয়েও বেশি দুর্ঘটনাক্রমে এই আচরণটি পাওয়া অসম্ভব কারণ টিপলস স্বয়ংক্রিয়ভাবে পাঠ্যে রূপান্তর করে না।

সুতরাং 9.1 এ:

or_examples=# select c.name from comp_table_test c;
ERROR:  column c.name does not exist
LINE 1: select c.name from comp_table_test c;

তবে সেই আচরণটি পেতে আমাদের:

or_examples=# select name(c::text) from comp_table_test c;

অথবা আমরা আমাদের নিজস্ব নাম ফাংশন সংজ্ঞায়িত করতে পারি কমপ্লেট টেবিল_টেষ্ট টাইপ করে এবং আমাদের যা খুশি তা ফিরিয়ে দিতে।


আমি এই উত্তর বুঝতে পারি না। আপনি বলছেন যে উপরে উত্থাপিত প্রশ্নটি এখন আর 8.3 বা তার বেশি হওয়া উচিত নয়? তবুও প্রশ্নটি 9.0
কলিনের হার্ট

0

"নাম" একটি সংরক্ষিত মূল শব্দ । সুতরাং আপনার কীওয়ার্ডটি ব্যবহার করতে "উদ্ধৃতি" দেওয়া উচিত:

SELECT "name" FROM site;

এটি অতীতে আমার কাছে এই কয়েকটি সমস্যার সমাধান করেছে, আপনার পোস্ট করা কোডটিও উদ্ধৃতি না দিয়ে কাজ করা উচিত। অন্য দিকে

select site.name from site;

শব্দটি কারণ আপনি স্পষ্টভাবে কলামটির নাম সমাধান করতে স্কিমা ব্যবহার করছেন


1
প্রচুর সংরক্ষিত শব্দ ব্যবহার করা যেতে পারে এবং এক্ষেত্রে এটি উদ্ধৃত করা কোনও কাজে দেয় না। এটি কারণ কারণ যদি সাইট.নাম কোনও কলাম হিসাবে তত্ক্ষণাত্ -৩.৩ পূর্ববর্তী সময়ে উপস্থিত না থাকে, তবে কী ঘটবে আপনি কোনও সাইটের ডেটা টাইপ বা সাইট থেকে স্পষ্টভাবে কাস্ট করা কোনও প্রকারের নাম ফাংশন সন্ধান করতে শুরু করবেন । যেহেতু সাইটটি স্পষ্টতই পাঠ্যে কাস্ট করা যেতে পারে, নাম (পাঠ্য) ব্যবহার করা হবে। ফলস্বরূপ select site.name from siteস্পষ্টভাবে রূপান্তরিত হতে পারে select name(site::text) from siteযা থেকে যাদুটি আসে।
ক্রিস ট্র্যাভারস 11
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.