পোস্টজিআইএস-এ কি কোনও অনন্য আইডি দিয়ে একটি ভিউ তৈরি করা সম্ভব?


24

আমি যখন পোস্টজিআইজে একটি ভিউ তৈরি করি তখন সেই ভিউতে কোনও অনন্য আইডি যুক্ত করার কোনও উপায় আছে? অন্য কোনও পোস্টজিআইএস টেবিলের "গিড" ক্ষেত্রের মতো?

সম্পাদনা: দুঃখিত, এটি আমার মূল পোস্টে অন্তর্ভুক্ত করা উচিত ছিল। আমি পোস্টগ্র্যাস্কল 9.0 এবং পোস্টজিআইএস 1.5 ব্যবহার করছি।

আন্দো

উত্তর:


29

আপনার ভিউতে কলাম হিসাবে সারি_নম্বার () ফাংশনটি ব্যবহার করতে সক্ষম হওয়া উচিত। এটি পোস্টগ্রিস 8.4 বা তারও বেশি ক্ষেত্রে কাজ করে।

http://www.postgresql.org/docs/current/static/functions-window.html

SELECT * FROM
( SELECT
    ROW_NUMBER() OVER (ORDER BY column_to_sort_by ASC) AS ROW_NUMBER,
    Col1, Col2
  FROM table_name
) myview_name

এটি এসকিউএল সার্ভার, ওরাকল এবং মাইএসকিউএল সহ বেশিরভাগ ডাটাবেসে কাজ করা উচিত।


শীতল - আমি এটি আগে দেব এবং আপনার কাছে ফিরে আসব।
Ando

3
আপনি ওভার কলাম row_number() OVER() AS "id"ছাড়াই করতে পারেন ORDER
ফ্যালাকাচিবার

এটি সাধারণত খুব দুর্বল ডিজাইনের সিদ্ধান্ত, row_numberকার্যকরভাবে এলোমেলো মান। এটি SELECTএর মধ্যে সামঞ্জস্যপূর্ণ হওয়ার উপর নির্ভর করতে পারে না , বিশেষত যখন অন্তর্নিহিত ডেটা পরিবর্তিত হয়।
jpmc26

@jpmc - এর অন্তর্নিহিত ডেটা পরিবর্তিত হলে তার প্রকৃতির দ্বারা একটি দৃশ্য পরিবর্তন হবে। একটি নির্ভরযোগ্য আইডি প্রশ্নের প্রয়োজনীয়তার অংশ নয়। কিছু জিআইএস-র জন্য কেবলমাত্র স্তরটি লোড করার জন্য প্রতিটি বৈশিষ্ট্যের জন্য একটি অনন্য আইডি প্রয়োজন (যেমন আর্কম্যাপ)।
ভিজোগ্রাফিক

অসম্পূর্ণ আইডির সাথে সঠিকভাবে কাজ করতে আমি আর্কম্যাপকে বিশ্বাস করব না। আপনি কীভাবে জানবেন যে আপনি যখন প্যান করছেন কিন্তু বৈশিষ্ট্য সারণীটি রিফ্রেশ করবেন না তখন এটি ডাটাবেসটির প্রয়োজন হয় না? তারপরে আপনি বৈশিষ্ট্যগুলি নির্বাচনের চেষ্টা করছেন না এমন একটি মিল রয়েছে।
jpmc26

5

পোস্টগ্রাইএসকিউএল (<= 8.3) এর পুরানো সংস্করণগুলির জন্য, এখানে আরও একটি সমাধান দেওয়া হয়েছে। এই উদাহরণে, আমি vid"ভিডি আইডি" এর জন্য অন্য কলামের নাম ব্যবহার করি ।

প্রথমে একটি সিকোয়েন্স তৈরি করুন। CYCLEএমনভাবে ব্যবহার করুন যাতে আপনি ক্রমের শেষে পৌঁছানোর ঘটনাটি লুপ হয়ে যায়।

CREATE SEQUENCE myview_vid_seq CYCLE;

এখন, একটি দৃশ্য তৈরি করুন যা ক্রমটি ব্যবহার করে:

CREATE OR REPLACE VIEW myview AS 
 SELECT nextval('myview_vid_seq'::regclass) AS vid, mytable.*
 FROM mytable;

এই পরামর্শগুলির চেষ্টা করার জন্য আমি আর কাজে ফিরে যাইনি। তবে আপনি যে সমাধানটি সমাধানের পরামর্শ দিয়েছেন এটি কি কেবল পোস্টগ্র্যাস্কিল সংস্করণ <= 8.3 এর জন্য? আমি পোস্টারস্কেল 9.0 এবং পোস্টজিআইএস 1.5 চালাচ্ছি।
Ando

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

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