এক পোস্টজিআইএস স্তর থেকে অন্যটিতে বৈশিষ্ট্য অনুলিপি করার সময় নকল জিআইডি কীভাবে এড়ানো যায়?


11

আমি যখন অন্য পোস্টগ্রিস স্তরে নতুন উপাদানগুলি (বৈশিষ্ট্যগুলি) প্রবেশ করি, তখন আমি এটি দুটি উপায়ে করতে পারি:

  1. নতুন উপাদান (গুলি) আঁকুন ('বৈশিষ্ট্য যুক্ত করুন' সহ) যা আমি খুব কমই বা করি
  2. অন্য পোস্টগ্রি স্তর (উত্স স্তর) থেকে কিছু উপাদান অনুলিপি করা (বা কাটা), এবং এটি লক্ষ্য স্তরটিতে আটকান যা আমি প্রায়শই করি

প্রথম উদাহরণে, সম্পাদনার সংরক্ষণ স্বাভাবিক কাজ করে কারণ এই স্তর পরার GID postgre ডাটাবেসের ক্রম থেকে * nextval ( 'layer_name_gid_seq' :: regclass) *

দ্বিতীয় উদাহরণে, আমি একটি ত্রুটি সংরক্ষণ সম্পাদনাগুলি সময়, কারণ যখন লক্ষ্য স্তর উৎস স্তর থেকে উপাদান অনুলিপি কপি qgis পেয়েছিলাম gid উৎস স্তর থেকে উপাদান। সম্পাদনাগুলি সংরক্ষণ করার চেষ্টা করার সময় এই ত্রুটিটি ফিরে আসে:

স্তর - চেজেভোদি "তে পরিবর্তন করতে পারেনি"
ত্রুটিগুলি: ERROR: 1 টি বৈশিষ্ট্য (গুলি) যোগ করা হয়নি।
সরবরাহকারীর ত্রুটিগুলি:
বৈশিষ্ট্যগুলি যুক্ত করার সময় পোস্টজিআইএস ত্রুটি: ERROR: সদৃশ কী মানটি অনন্য বাধা "cjevovodi_okill_pkey" বিবরণ লঙ্ঘন করে
: কী (gid) = (5) ইতিমধ্যে বিদ্যমান।

আমি ক্ষেত্রের গিডে * পরবর্তী স্তর ('স্তর_নাম_জিদ_সেক' :: রেগক্লাস) * অনুলিপি করার চেষ্টা করেছি, তবে ক্ষেত্রের সংখ্যার হিসাবে সংজ্ঞায়িত হিসাবে এই ক্রমটি ফিল্ড গিডে আটকানো যাবে না।

উত্স স্তর থেকে উপাদানগুলি অনুলিপি করার সহজ উপায়টি কি কেউ জানেন (বিদ্যমান জিড সহ) নতুন গিড বরাদ্দ করেছেন?

ধন্যবাদ!


কিগিস এবং প্ল্যাটফর্মের কোন সংস্করণ আপনি ব্যবহার করছেন? আমি উইন্ডোজ in-এ কিউজিআইএস ২.০ ব্যবহার করছি এবং পোস্টগিগ্স স্তরগুলির মধ্যে কপি পেস্ট করার ক্ষেত্রে আমার সমস্যা হচ্ছে বলে মনে হয় না।
আলেকজান্দ্রে নেট

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

উত্তর:


4

আমি কিউজিআইএস 2.2 উইন্ডোজ, সি 3 এ 2817 এ এটি পুনরুত্পাদন করতে সক্ষম নই।

অন্যান্য সংস্করণগুলি যদি অন্যরকম আচরণ করে, বা আপনার যদি এই সমস্যাটি অবিরত থাকে তবে আপনি সম্ভবত টেবিলে পোস্টগ্র্রেএসকিউএল ট্রিগার সেট করে রাখতে পারেন:

এই উদাহরণ সারণী ব্যবহার করে:

CREATE TABLE testing (gid serial PRIMARY KEY, geom geometry(Polygon, 4326));

এখানে একটি ট্রিগার ফাংশন যা gidপ্রয়োজন সেখানে একটি নতুন নিয়োগ করবে :

CREATE OR REPLACE FUNCTION testing_insert_trigger()
RETURNS trigger AS
$$
BEGIN
IF EXISTS (SELECT 1 FROM testing WHERE gid = NEW.gid) THEN
    NEW.gid := nextval('testing_gid_seq'::regclass);
END IF;
RETURN NEW;
END;
$$ language 'plpgsql';

ফাংশনটি টেবিলের সাথে আবদ্ধ করা হচ্ছে ...

CREATE TRIGGER testing_insert 
BEFORE INSERT ON testing
FOR EACH ROW EXECUTE PROCEDURE testing_insert_trigger();

এটি স্বয়ংক্রিয়ভাবে নতুন আইডি নির্ধারণ করবে যেখানে gidইতিমধ্যে উপস্থিত রয়েছে। উদাহরণস্বরূপ, নিম্নলিখিত কোয়েরিটি এখন ব্যর্থ হওয়ার পরিবর্তে টেবিলের সমস্ত ডেটা নকল করবে:

INSERT INTO testing (SELECT * FROM testing);

অবশ্যই, এই পদ্ধতিটি আপনার প্রাথমিক কীটির উদ্দেশ্যকে আপোস করতে পারে, তাই এটি সাবধানে ব্যবহার করুন।


0

উত্স স্তর থেকে বৈশিষ্ট্যগুলি নির্বাচন করুন এবং শেফফায়লে নির্বাচিত (হিসাবে নির্বাচিত হিসাবে সংরক্ষণ করুন ...) সংরক্ষণ করুন। কিউজিআইএস প্রকল্পে সংরক্ষিত শেফফিল যুক্ত করুন এবং বিশিষ্ট টেবিলটি খুলুন, তারপরে ফিল্ড "গিড" মুছুন এবং শেফফাইল সংরক্ষণ করুন। শেফফাইলে বৈশিষ্ট্যগুলি নির্বাচন করুন এবং সেগুলি আপনার কাজের স্তরে অনুলিপি করুন।


আপনার উত্তরের জন্য ধন্যবাদ তবে আমি এটি করার আরও সহজ উপায় খুঁজতে চেষ্টা করছি।
হাপা

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