মাইএসকিএল থেকে পোস্টগ্র্যাস্কিলে কীভাবে বড় ব্লব টেবিল স্থানান্তরিত করবেন?


14

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

টেবিল কাঠামো খুব সহজ:

mysql> show create table samples;
.. skipped ...
CREATE TABLE `samples` (
      `File_ID` int(11) NOT NULL,
      `File` longblob,
      PRIMARY KEY (`File_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=binary

তবে এটি খুব বড় (> 20 জিবি)।

আমি মাইএসকিলডাম্পের --hex-blob প্যারামিটারটি ব্যবহার করার চেষ্টা করেছি - তবে পোস্টগ্র্রেএসকিউএল দ্বারা এই ফর্ম্যাটের ডেটা গ্রহণ করা হয় না যখন আমি কমান্ড ফাইল হিসাবে ফলস্বরূপ ডাম্পফিল ব্যবহার করার চেষ্টা করি। আমি অন্য একটি বিকল্প চেষ্টা করেছি - ট্যাব বিকল্পটি কেবল একটি ডাম্প পেতে এবং তারপরে এটি কপি কমান্ডের সাথে পোস্টগ্র্রেএসকিউএলে inোকাতে - তবে --hex-blob --tab এর সাথে কাজ করছে না এবং পোস্টগ্র্যাসকিউএল এখনও সেখানে ডাম্পফাইলে স্বীকার করে না এটিতে অবৈধ অক্ষর।

আমি এই বিষয়ে কোনও পরামর্শ পেয়ে খুব খুশি হব - যদিও আমি ভাবতে শুরু করেছি যে কাস্টম মাইগ্রেশন সরঞ্জাম লেখার পক্ষে কোনও খারাপ ধারণা নয় ...


সর্বশেষে আমি যাচাই করেছি, পোস্টগ্র্যাসএসকিউএল এর dblink কেবলমাত্র অন্য পোস্টগ্র্যাসএসকিউএল দৃষ্টান্তের সাথে সংযোগ করতে পারে। আমি মনে করি না যে মাইএসকিউএল প্রক্সি আরও ভাল। পোস্টগ্রেএসকিউএল প্রবেশ করতে মাইএসকিউএল থেকে পড়তে আপনার নিজের পছন্দসই ভাষা (আই: জাভা, ইত্যাদি) ব্যবহার করার প্রয়োজন হতে পারে ...

@ ওএমজি: আমি প্রশ্নে লক্ষ্য করেছি যে, আমি প্রায় এই পথে যেতে প্রস্তুত - একটু আশা করি যে কেউ এই বিষয়ে কিছু জানে।

Pgsql এর শেষে কোন ডাটা টাইপ আপনি এটি sertোকানোর চেষ্টা করছেন? আমি নিজেই বাইটায় করতাম।

@ স্কট: হ্যাঁ, অবশ্যই এটি বাইটিয়া।

2
posgresql 9 সরাসরি বাইটিয়া জন্য হেক্স সিনট্যাক্স সমর্থন করে, এখানে দেখুন: postgresql.org/docs/9.0/interactive/… (আপনার যদিও কিছুটা

উত্তর:


12

আমি মনে করি সবচেয়ে সহজ উপায় যে ব্যবহার করতে হয় --hex-blobউপর সুইচ mysqldumpএবং সঙ্গে, psql দ্বারা পুনঃস্থাপন decode(string text, type text)। তবে এটি এতটা সহজ নয়, কারণ আপনাকে এই ডিকোড ফাংশনটি যুক্ত করে কিছুটা উত্পাদিত ডাম্প (সেড, অ্যাজক) পরিবর্তন করতে হবে। উদাহরণ স্বরূপ:

mysqldump -u root -p --skip-quote-names --hex-blob --skip-triggers \
    --compact --no-create-info mysql samples > prepg.dump

sed "s/0x\([0-9,A-F]*\))/decode('\1','hex'))/g" prepg.dump > pg.dump

পিএসকিএল অধিবেশন:

CREATE TABLE samples
(
    file_id integer PRIMARY KEY,
    file bytea
);

\i 'path/to/pg.dump'

গ্রজেগোর্জ, একটি পরামর্শের জন্য ধন্যবাদ, আমি এটি চেষ্টা করে দেখাব এবং ফলাফলগুলি প্রতিবেদন করব।

কবজির মতো কাজ করেছেন :) পরীক্ষা 10 টি ফাইল সঠিকভাবে আমদানি করা হয়েছে, সমস্ত চেকসামের সাথে মিল রয়েছে মূল। আপনাকে অনেক ধন্যবাদ!

1
আপনার যদি অন্য ক্ষেত্র থাকে তবে আপনি এটি কমা বা পিছনের প্রথম বন্ধনীর সাথে মেলাতে চাইবেন না। এটি কাজ করা উচিত:sed "s/0x\([0-9A-F]*\)/decode('\1','hex')/g" prepg.dump > pg.dump
tjmcewan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.