PostgreSQL: উত্পন্ন কলামগুলি


16

PostgreSQL উত্পন্ন কলামগুলি সমর্থন করে ? ভার্চুয়াল কলাম হিসাবেও জানুন । আমি না সম্পর্কে কথা বলা IDENTITYকলাম

আমি এই উল্লেখযোগ্য বৈশিষ্ট্যটিতে কোনও তথ্য খুঁজে পাই না তবে আমি জানি যে এটি এসকিউএল সার্ভারে এবং মারিয়াডিবি এবং মাইএসকিউএল এর সর্বশেষতম সংস্করণে পাওয়া যায়।

বৈশিষ্ট্যটি এসকিউএল: 2003 স্ট্যান্ডার্ডে উল্লেখ করা হয়েছে , এবং পোস্টগ্র্রেএসকিউএল ফোরামে ২০০ 2006 সালের দিকে কিছুটা আলোচনা হয়েছিল, তবে আমি এ বিষয়ে তেমন কিছু খুঁজে পাচ্ছি না।

এসও নিয়ে কিছু আলোচনা আছে, তবে এটি এখন বেশ পুরানো, সুতরাং এটির মেয়াদোত্তীর্ণ।


2
এসও-তে 2012 থেকে এই সম্পর্কিত উত্তরটি সহায়ক হতে পারে: স্ট্যাকওভারফ্লো / প্রশ্ন / 11165450/… এখনও বৈধ।
এরউইন ব্র্যান্ডসেটেটার

@ এরউইন ব্র্যান্ডসটেটার দুঃখিত দুঃখিত আমি এই মন্তব্যটি মিস করেছি। এটি একটি দরকারী কৌশল। ধন্যবাদ।
ম্যাঙ্গো

উত্তর:


17

আপনি যা চান তা এটি নিশ্চিত কিনা তবে এট্রিবিউট নোটেশন row.full_nameএবং ফাংশন স্বরলিপি full_name(row)পোস্টগ্রিস্কল-এর সমতুল্য।

তার মানে আপনি একটি টেবিল নিন

CREATE TABLE people (
  first_name text,
  last_name text
);

এবং একটি ফাংশন:

CREATE FUNCTION full_name(people) RETURNS text AS $$
  SELECT $1.first_name || ' ' || $1.last_name;
$$ LANGUAGE SQL;

এবং এটিকে কল করুন:

select full_name from people

এটা কি আপনার প্রয়োজন?

জিনিসের গতি বাড়ানোর জন্য আপনি একটি এক্সপ্রেশন সূচক তৈরি করতে পারেন:

CREATE INDEX people_full_name_idx ON people
USING GIN (to_tsvector('english', full_name(people)));

বা একটি বস্তুগত দৃশ্যে সবকিছু সংরক্ষণ করুন।

উদাহরণ এখান থেকে নেওয়া: http://bernardoamc.github.io/sql/2015/05/11/postgres- ভার্চুয়াল- কলামগুলি /


2
এটা সঠিক উত্তর. উদাহরণস্বরূপ দেখুন, পোস্টগ্রেস্ট কীভাবে এই আচরণটিকে "গণিত কলাম" হিসাবে উল্লেখ করে।
ফিয়াটজাফ

টাইপো, আমার মনে হয় - নির্বাচনটি হওয়া উচিত select people.full_name from peopleনাকি select full_name(people) from people?
বারগুস্ট

না এটি এর মতো কাজ করে। "সিলেক্ট পিপল.ফুল_নাম লোকেদের" এ প্রিফিক্সটি নিয়মিত এসকিউএল এর মতো রেখে দেওয়া যেতে পারে।
ফ্যাবিয়ান জিন্ডল

আমি এই উত্তরটি মিস করেছি, আসার পরে, যেমন আমি ছেড়ে দিয়েছিলাম অনেক পরে given পরামর্শের জন্য ধন্যবাদ.
মাংগো

1
আপনি কি তখন গ্রহণযোগ্য উত্তরটি পরিবর্তন করতে পারবেন?
ফ্যাবিয়ান জিন্ডল 26'18

6

না, এটি বর্তমানে (পোস্টগ্রিস 9.6 হিসাবে) সমর্থিত নয়।

আপনি যদি সূচকের প্রয়োজন না হয় এমন সাধারণ গণনা হয় তবে কেবল ট্রিগার বা একটি ভিউ ব্যবহার করা উচিত।


ইঁদুর। আমি মনে করি যদি আমার পারফরম্যান্সের প্রয়োজন হয় তবে আমি একটি বস্তুগত দৃশ্যের জন্য যেতে পারব। আমি বৈশিষ্ট্যটির জন্য একটি অনুরোধ যোগ করেছি, কারণ এটি প্রতিযোগিতায় ইতিমধ্যে উপলব্ধ।
মানঙ্গো

1
এমভিউয়ের দরকার নেই। ট্রিগার সহ একটি কলাম আপনাকে কলামটির সামগ্রী সূচী করতে দেয়
a_horse_with_no_name

আমার কাছে অতিরিক্ত রিয়েল কলামগুলি সংরক্ষণ করার সাথে একটি দার্শনিক সমস্যা রয়েছে যা মূলত অন্যান্য ডেটার পুনরাবৃত্তি। এটি টেবিলটিকে স্বাভাবিক করে তোলে।
মাংগো

5
ঠিক আছে, একটি গণিত কলামটি হ'ল ডি-নরমালাইজড ডেটা সঞ্চয় করে। গণিত কলামের মান কীভাবে উত্পন্ন হয় তা বিবেচ্য নয়। আমি একটি "আসল" গণিত কলাম এবং একটি ট্রিগার মাধ্যমে উত্পন্ন একটি মধ্যে ধারণাগত পার্থক্য দেখতে পাচ্ছি না
a_horse_with_no_name

আরেকটি কাজের লক্ষণ (কিছু ক্ষেত্রে) হ'ল একটি অভিব্যক্তি সূচক index
ypercubeᵀᴹ

5

হ্যাঁ: GENERATED ALWAYS AS … STORED

এসকিউএল: 2003 স্ট্যান্ডার্ডে উল্লিখিত পোস্টগ্রিজ 12 উত্পন্ন কলামগুলির কার্যকারিতা যুক্ত করে ।

মানটি একটি INSERTবা তার সময়ে তৈরি করা হয় UPDATE, তারপরে অন্য কোনও মানের মতো সারি দিয়ে সঞ্চিত হয়।

উত্পাদিত অবশ্যই একই টেবিলের বেস কলামের উপর ভিত্তি করে, বা একটি অপরিবর্তনীয় ফাংশনে থাকতে হবে

সিনট্যাক্সটি সহজ, একটি ধারা CREATE TABLE:

GENERATED ALWAYS AS ( generation_expr ) STORED 

উদাহরণ:

CREATE TABLE people (
    ...,
    height_cm NUMERIC,
    height_in NUMERIC GENERATED ALWAYS AS ( height_cm / 2.54 ) STORED
);

বৈশিষ্ট্য:

  • ইনডেক্স করা যায়।
  • এসকিউএল স্ট্যান্ডার্ডের অংশ।

আদেশ সহকারে:

  • একই টেবিলের কলামের উপর ভিত্তি করে (সম্পর্কিত টেবিল নয়)
  • বিভাজনের জন্য অনুমোদিত নয় (একটি পার্টিশন কী এর অংশ হতে পারে না)
  • সঞ্চয়স্থানে স্থান নিয়ে ডেটা সর্বদা সারিতে লেখা থাকে
    • ভবিষ্যতের বৈশিষ্ট্যটি স্টোরেজ ছাড়াই দ্য ফ্লাইতে গণনা করা মানগুলির জন্য ভার্চুয়াল সরবরাহ করতে পারে
  • একক জেনারেশন গভীর (বেস কলাম ব্যবহার করুন, অন্য উত্পন্ন কলাম নয়)
  • ডিফল্ট দ্বারা জেনারেটেড কোনও নেই (আপনি মানকে ওভাররাইড করতে পারবেন না)
  • ট্রিগার আগে জেন-কল অ্যাক্সেস করতে পারবেন না (মান এখনও নির্ধারিত নয়)
  • ক্রিয়াকলাপ অবশ্যই পরিবর্তনযোগ্য হতে হবে

দেখা:


এই তথ্যের জন্য ধন্যবাদ। আমি দেখতে পাচ্ছি যে 12 সংস্করণটি এখনও পুরোপুরি প্রকাশিত হয়নি, তবে আমি এটির অপেক্ষায় আছি। আমি নোট করেছি যে পোস্টগ্রিসকিউএল আরও মানক সিনট্যাক্স ব্যবহার করে তবে অন্যথায় এমএসএসকিউএল এর মতো হয়। আমি এসকিউএল ২০০৩ স্পেসিফিকেশনটি এখানে পেয়েছি: sigmodrecord.org/publications/sigmodRecord/0403/… । আমি সবসময় বলেছি যে এসকিউএল একটি খুব ধীরে চলমান মান, এবং ডিবিএমএস বাস্তবায়ন এমনকি ধীর গতির।
মানংগো

0

আপনার ব্যবহারের ক্ষেত্রে উপর নির্ভর করে, আপনি একটি নতুন কলাম ঘোষণার মাধ্যমে এবং সন্নিবেশ / আপডেটের উপর ট্রিগার দিয়ে এটিকে জনপ্রিয় করে এই ধরণের আচরণ অর্জন করতে পারেন।

আমি ইতিমধ্যে যদি উত্তরগুলি ব্যবহার করতে পারি তবে ডুপ্লিকেট করা ডেটা এড়ানো যা আপনার ইতিমধ্যে যা আছে তা ফর্ম থেকে নেওয়া যেতে পারে তবে এটি কৌশলটি করে এবং আপনি একবার গণনা করতে এবং সংরক্ষণ করতে চান এমন কম্পিউটেশনাল নিবিড় উদ্ভূত ক্ষেত্রগুলির জন্য দরকারী হতে পারে।

আমি এমন একটি সমস্যার সাথে মোকাবিলা করার জন্য এই পদ্ধতির বিষয়টি বিবেচনা করেছি যেখানে আমার মাঝে মাঝে 18-অঙ্কের কীটির 15 টি অঙ্ক থাকে (শেষ 3 টি সংখ্যা কেবল একটি চেকসাম) তবে বিদেশী-মূল সম্পর্কটি কার্যকর করতে সক্ষম হতে চেয়েছিলাম।

ট্রিগারগুলিতে পিজি ডক্স: https://www.postgresql.org/docs/9.6/sql-createtrigger.html

ডাব্লু 3 উদাহরণ: https://www.w3resource.com/PostgreSQL/postgresql-triggers.php

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