পোষ্টজিআইএসে একাধিক শেফফিলকে বাল্ক লোড করুন


33

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

এই সমস্ত ফাইলকে আমার পোস্টজিআইএস ডাটাবেসে (উইন্ডোজ OS ওএসে) বাল্কে রূপান্তর করার সর্বাধিক সময়-কার্যকর উপায় কী?

আপডেট: pgAdmin3 "পোস্টজিআইএস আকৃতি ফাইল আপলোডার" (নীচে উল্লিখিত হিসাবে) বাল্ক আমদানি পোস্টজিআইএস ২.০ সহ এখন ডিফল্টরূপে উপলব্ধ ।


আমি এর একটি সিমলার উত্তর খুঁজছি। তবে আমি এটিকে প্রতি ব্যাচ চাকরী করতে চাই যা প্রতি রাতে চলে। কার্যত আমি আমার পোস্টজিআইএসকে আরএসএসডিএ (আপাতত) দাস করতে চাই। পোস্টজিআইএস এবং এসকিউএল-তে নতুন হওয়ার কারণে, আমি cmd.exe স্ক্রিপ্টটি কী করবে তা পেয়েছি তবে কোনওভাবে এটি আমার মাথায় লেগে নেই। আমি যা করতে চাই তা হল একটি সিরিজের shp ফাইলগুলি যা আর্কএসডিই থেকে ব্যাচের কাজ হিসাবে রফতানি করা হয়েছে, তারপরে এগুলিকে আমার পোস্টজিআইএস এ আপলোড করুন, যা ইতিমধ্যে বিদ্যমান জিআইএস / টেবিলগুলিকে জায়গায় লিখে ফেলতে পারে।
ভূগোলগুলি

"আর্কএসডিই থেকে পোস্টজিআইএসে ডেটা সিঙ্ক্রোনাইজ করার জন্য ব্যাচ কীভাবে করা যায়" এর পংক্তিতে আমি এটি একটি নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করব। কিছু আকর্ষণীয় ধারণা থাকতে পারে।
মাইক টি

উত্তর:


22

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

এখানে চিত্র বর্ণনা লিখুন


32

আপনার যদি একটি উইন্ডোজ কম্পিউটার থাকে তবে CMD.EXEকয়েকটি 'রহস্যজনক ' লুপের সাহায্যে আপনি ভাল 'ওল' ব্যবহার করতে পারেন । নিশ্চিত করুন যে আপনি "shd / sql" ফাইলগুলি লোড করতে হবে এমন একটি "অন্তর্ভুক্ত" ডিরেক্টরিতে এটি করেছেন।

প্রথম পদক্ষেপে, এসকিউএল লোডার ফাইলগুলি তৈরি করুন (আমি ধরেও নিয়েছি যে আপনার সাথে ল্যাট / লং ডাব্লু জিএস 84 ডেটা আছে 4326 .. আপনার এসআরএস এ এটি আপডেট করুন):

for %f in (*shp) do shp2pgsql -s 4326 %f public.%~nf > %~nf.sql

তারপরে আপনার এসকিউএল ফাইলগুলি দেখতে দেখতে ভাল লাগছে কিনা তা পরীক্ষা করে দেখুন, তারপরে অনুরূপ লুপ করুন:

for %f in (*sql) do psql -h myserver -d mydb -U myuser -f %f > nul

bashPOSIX লোক (লিনাক্সের, ম্যাক OS X, ইত্যাদি) জন্য সমতুল্য ভালো কিছু হল:

for f in *.shp
do
    shp2pgsql -s 4326 %f public.`basename $f .shp` > `basename $f .shp`.sql
done

তারপর

for f in *.sql
do
    psql -h myserver -d mydb -U myuser -f $f > /dev/null
done

বা উভয় অংশই একক লুপে পাইপ করা হয়েছে, যদি আপনার অন্তর্বর্তী .sqlফাইলগুলি রাখার প্রয়োজন না হয় :

for f in *.shp
do
    shp2pgsql -s 4326 %f public.`basename $f .shp` | psql -d mydb > /dev/null
done

এটি কি একক লুপে আরও ভাল কাজ করবেfor f in *.shp do shp2pgsql -s 4326 %f public.'basename $f .shp' > 'basename $f .shp'.sql | psql -h myserver -d mydb -U myuser done
Sam007

হ্যাঁ, এটি একটি কমান্ডে করা যেতে পারে (তবে >পুনঃনির্দেশ অংশটি ছাড়াই , এটি |পাইপ অংশটি ভেঙে দেয় ), যতক্ষণ না আপনি নিশ্চিত হন যে এসকিউএল পিএসএলএল পাস হয়েছে তা সঠিক is আমি যুক্তি দেব যে এটি ভাল নয়, যেহেতু এসকিউএল ফর্ম্যাটে ডেটার কোনও রেকর্ড নেই।
মাইক টি

4

আপনি এই একক কমান্ডটিও ব্যবহার করতে পারেন যা লুপিংয়ে আরও সহজ করতে সহায়তা করে এবং পৃথকভাবে। এসকিউএল তৈরি করার দরকার নেই,

for f in *.shp
    do shp2pgsql -c -D -s 4326 -I $f public.${f%.*} | psql -h hostname -d dbname -U usrname
done

2

এছাড়াও আপনি তাকান করতে চাইবেন থুতু , যা QGIS জন্য PostGIS লোডার প্লাগ হয়


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