আমি কীভাবে আমার স্থানীয় টেস্টিং ডাটাবেসে প্রোডাকশন ডেটাবেস থেকে টেবিলডেটার একটি উপসেট রফতানি করতে পারি?


10

আমাদের তুলনামূলকভাবে বড় উত্পাদন পোস্টগ্রাস ভিত্তিক ডিবি রয়েছে: have 20 গিগাবাইট। PostgreSQL ডাটাবেস হিরকুতে হোস্ট করা হয়।

আমি আমার স্থানীয় ডাটাবেসে টেবিলের ডেটার একটি ছোট উপসেট অনুলিপি করতে চাই যাতে আমি উত্পাদন নিয়ে কাজ না করেই তাদের উপর কয়েকটি পরীক্ষা চালাতে পারি।

আমি নিজেই নমুনা ডেটা উত্পন্ন করতে চাই না, বরং উত্পাদন পরিবেশে ইতিমধ্যে বিদ্যমান ডেটা ব্যবহার করব।

ডাটাবেসে প্রতিটি টেবিল থেকে 100 ডলার সারি যথেষ্ট হবে। এটি সম্পাদন করার কোনও সহজ উপায় আছে?


1
মাত্র কৌতূহলের বাইরে, কেন 20 জিবি খুব বেশি ডিস্কের স্থান? কেবলমাত্র ডিবি স্ক্র্যাচ স্পেসের জন্য আমার ভিএম-তে আমার পরীক্ষা-ডিস্কে আমার 100 জিবি বরাদ্দ রয়েছে।
jcolebrand

যেহেতু আমি মাঝে মাঝে আমার বাহ্যিক এইচডি আমার সাথে রাখি না, তাই আমার এসএসডি কেবল পর্যাপ্ত স্থান সরবরাহ করে না। প্লাস আমার সত্যিই কেবল আমার ডিবি থেকে নমুনা ডেটা প্রয়োজন, এবং পুরো ডিবি নয়।
jottr

1
যথেষ্ট ভাল, তবে আমি সৃজনশীল হওয়ার জন্য আপনাকে উত্সাহিত করি। এসডি স্লটে ফিট করার জন্য একটি এসডি কার্ড বিবেচনা করুন, কারণ আমার বেশি ডেটা :-) থাকার কোনও সমস্যা ছিল না তবে এটি স্তন্যপান করে: - personal আমার ব্যক্তিগত ল্যাপটপটি সর্বশেষ ফ্রি 10 জিবিতে নেমে গেছে।
jcolebrand

উত্তর:


3

আমি এই সরঞ্জামটি ব্যবহার করি নি, তবে জেলর কেবল এটি করার প্রতিশ্রুতি দিয়েছেন

ডাটাবেস সাবসেটিং এবং ব্রাউজিং সরঞ্জাম। প্রাসঙ্গিক ডাটাবেসগুলি (জেডিবিসি) থেকে রফতানি ধারাবাহিকভাবে, উল্লেখযোগ্যভাবে অক্ষত সারি-সেটগুলি

http://sourceforge.net/projects/jailer/


1

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


1

আরেকটি বিকল্প কিছু যে আমি শুধু সম্প্রতি জুড়ে আসা করেছি (মঞ্জুর, আমি এখনো এটি ব্যবহার করতে, কিন্তু পরিকল্পনা শীঘ্রই): rdbms-subsetter

এটি জেলারের তুলনায় কিছুটা সহজ এবং হালকা, কয়েকটি দুর্দান্ত বৈশিষ্ট্য / পার্কস সহ:

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

এটি হিরোকু ডাটাবেসের জন্য বিশেষভাবে অন্য একটি বিকল্প উল্লেখ করার মতো, যা আমি প্রচুর ব্যবহার করেছি (যেমন আমি সেখানে কাজ করতাম) to

হিরোকু একটি নতুন স্ন্যাপশ্যাটেড ডিবি আনতে আসলেই খুব দ্রুত কারণ এটি লেখার জন্য প্রস্তুত লগগুলি প্রথমে প্রস্তুত করার জন্য টানছে, তারপরে প্রাথমিক ডিবিতে সংযোগ স্থাপন করেছে, তারপরে এটি অনুসরণ করা বন্ধ করে দেয়। উত্পাদনকে খুব বেশি প্রভাবিত করতে এড়াতে আপনি অ্যাপ্লিকেশনগুলিতে এই "কাঁটাচামচ" তৈরি করতে পারেন:

$ heroku addons:create heroku-postgres[:specific-plan] \
    --fork your-production-app::DATABASE \
    --app some-other-app-to-own-forked-database \
    [--as PRODUCTION_SNAPSHOT]

তারপরে, আপনি স্থানীয়ভাবে সেই স্ন্যাপশটের দিকে নির্দেশ করে আপনার অ্যাপটি বুট করতে পারেন up আমি ডেটা বা স্কিমা মাইগ্রেশন বা ডিবাগ গ্রাহক সমস্যাগুলির শুকনো রান করতে এটি ঘন ঘন ব্যবহার করি।

উপরে যে কমান্ডে, আপনি একটি ডিবি সঙ্গে প্রবেশযোগ্য আছে DATABASE_URLউপর your-production-app, আপনি আপ ডিবি সঙ্গে প্রবেশযোগ্য দিয়ে শেষ করব PRODUCTION_SNAPSHOT_URL(যদি আপনার নির্দিষ্ট করা --as) নামে একটি আলাদা অ্যাপে some-other-app-to-own-forked-database


0

সারিগুলির একটি এলোমেলো সেট পেতে আপনি এই জাতীয় সীমাবদ্ধ ব্যবহার করতে পারেন :

SELECT * FROM my_table LIMIT 100

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


আপনাকে সাহায্য করার চেষ্টা করার জন্য ধন্যবাদ, তবে এটি আমার প্রশ্নের উত্তর দেয় না।
jottr

আমি জানি কীভাবে আমার নির্বাচনকে সীমাবদ্ধ করতে হয়। আমার সমস্যাটি হ'ল, হিরকু থেকে ডেবিটির একটি উপসেট সহ ডিবি ক্লোন করার জন্য আমার কিছু উপায় প্রয়োজন; হিরকাস ম্যানুয়ালটিতে বর্ণিত পুরো ডিবি ডাম্প করা কোনও বিকল্প নয়।
jottr

1
@ এলিমেঞ্জ - এমন কোনও কারণ আছে যা আপনি কেবলমাত্র টেবিলগুলি এবং কপি (নির্বাচন করুন ... সীমাবদ্ধ 100) 'ফাইলের নাম' রাখতে পারবেন না ...? আপনি কি হিরোকুতে কপি করতে পারবেন না?
rfusca

@ আরফুসকা - আমি কপির উপস্থিতি জানতাম না। আমি চেষ্টা করে আবার রিপোর্ট করব
jottr

3
@ আরফুসকা: সাধারণ ব্যবহার করে LIMITএফকে রেফারেন্সগুলি ব্যবহার করা হবে না। উদাহরণস্বরূপ: অর্ডার সারণী থেকে 100 টি সারিগুলিতে গ্রাহকরা থাকতে পারে যা গ্রাহক টেবিল থেকে 100 টি সারি রফতানির সময় উপস্থিত না থাকে।
a_horse_with_no_name
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.