টেবিলের কাঠামোটিকে নতুন টেবিলের মধ্যে অনুলিপি করুন


91

সমস্ত কী এবং সীমাবদ্ধতা সহ ডেটা ছাড়াই কোনও টেবিলের কাঠামো কোনও নতুন টেবিলের অনুলিপি করার কোনও উপায় আছে?

উত্তর:


107

একটি সাধারণ স্কিমা অনুলিপির জন্য এই জাতীয় ধারা ব্যবহার করুন।

CREATE TABLE new_table_name ( like old_table_name including all)

13
লক্ষণীয় যে আপনি এই জাতীয় বাক্য গঠন ব্যবহার করার সময় নতুন কলামগুলিও যুক্ত করতে পারেন:CREATE TABLE new (like old, extra_column text);
ব্র্যাড কোচ

@ ব্র্যাডকোচ এই বিবৃতিতে অতিরিক্ত বাধা যুক্ত করা সম্ভব? নাকি এটি আলাদা হওয়া উচিত?
আন্দ্রে দেইনকো

@ আন্ড্রেডিইনকো এটি নির্ভর করে, সম্পূর্ণ বিবরণের জন্য টেবিল ডকস তৈরি করুন check এই সিনট্যাক্সটি ব্যবহার করে আপনি সহজেই চেক এবং বিদেশী কী সীমাবদ্ধতাগুলি যুক্ত করতে পারেন ঠিক যেমন অন্য কোনও তৈরি বিবৃতিটির মতো, তবে আমি নিশ্চিত নই যে কলাম স্তরের সীমাবদ্ধতা পরবর্তী পরিবর্তন ছাড়াই প্রয়োগ করা যেতে পারে কিনা।
ব্র্যাড কোচ

4
এখনই চেষ্টা করা হয়েছে। বিদেশী-কী সীমাবদ্ধতা এবং ট্রিগারগুলি অনুলিপি করেনি (পোস্টগ্রিসকিউএল 9.2)।
জোনিস এলমারিস

73

ওয়েল, আপনি এসকিউএল এর সাথে সবচেয়ে কাছেরটি হ'ল:

create table new (
    like old
    including defaults
    including constraints
    including indexes
);

তবে এটি সব কপি করবে না। অনুপস্থিত সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলি হ'ল বিদেশী কী। এছাড়াও - ট্রিগারগুলিও অনুলিপি করা হয় না। অন্যান্য জিনিস সম্পর্কে নিশ্চিত না।

আরেকটি উপায় হ'ল টেবিলের কাঠামোটি ডাম্প করা, নামটির নামটি ডাম্পে পরিবর্তন করা এবং এটি আবার লোড করা:

pg_dump -s -t old databases | sed 's/old/new/g' | psql

তবে সাবধান থাকুন যে এ জাতীয় সরল সিড অন্য জায়গায় নতুন থেকে পুরানোতেও পরিবর্তিত হবে (উদাহরণস্বরূপ যদি আপনার টেবিল কলামে "is_scolded" থাকে তবে এটি "is_scnewed" হয়ে যাবে)।

প্রশ্নটি আসলেই বরং: আপনার এটির প্রয়োজন কেন - কারণ বিভিন্ন উদ্দেশ্যে, আমি বিভিন্ন কৌশল ব্যবহার করব।


দ্রষ্টব্য: including constraintsপোস্টগ্রিজ এসকিউএল 8.3
রাগনার 123

4
Postgres 9.3 :) এ এক কবজির মতো কাজ করেছেন
গণপতি

14
সেরা উত্তর. কেবলমাত্র সাবধান হন যে আপনার যদি একটি "সিরিয়াল" মান বা কোনও অনুক্রমের জন্য অন্য কোনও কলাম ডিফল্ট হয় তবে এটি পুরানো সারণির মতো একই ক্রম ব্যবহার করবে! সুতরাং আপনি যদি কোনও টেবিলে স্টাফ .োকান তবে এটি উভয়ের জন্য বৃদ্ধি পাবে।
sudo

19

একটি সারণী সম্পূর্ণ অনুলিপি করতে, টেবিল কমান্ড ব্যবহার করে সংক্ষিপ্ত ফর্মটিও ব্যবহার করা যেতে পারে:

CREATE TABLE films2 AS
    TABLE films
    WITH NO DATA;

আরও বিশদ এখানে


দুর্ভাগ্যক্রমে এটি ডেটাও অনুলিপি করে - আমি যে বিষয়টিটি বুঝতে পারি তা থেকে কেবল স্কিমা অনুলিপি করা
জেসমিন

Table আইডিগুলি নতুন টেবিলের মধ্যে শূন্য এবং ডিফল্ট মানগুলি অনুলিপি করে না।
ইলহান

10

পিজিএডমিনটি একবার দেখুন - আপনি যা চান তা করার সহজতম উপায়।
টেবিলের উপর ডান ক্লিক করুন, স্ক্রিপ্টস - তৈরি করুন।


আমি কেবল পিএইচপিপিজিএডমিনে অ্যাক্সেস পেয়েছি; আমি সার্ভারের মালিক নই।
অ্যালেক্স এস

যথেষ্ট ফর্সা। পিএইচপিপিজিএডমিনে: টেবিলটিতে নেভিগেট করুন, রপ্তানি ক্লিক করুন, "কেবল কাঠামো" নির্বাচন করুন এবং আপনার স্ক্রিপ্ট রয়েছে
ChssPly76

আমি দৃ sure়ভাবে নিশ্চিত যে এগুলি ইনস্টলে অবশ্যই তাদের একটি বাগ হতে হবে - এটি করার পরে এটি ঠিক ফ্রেমের একটি ফাঁকা পৃষ্ঠা দেখায়: /
অ্যালেক্স এস

4
আপনি কি "শো" বা "ডাউনলোড" বিকল্প দুটি ব্যবহার করে দেখেছেন? যদি উভয়ই কাজ না করে তবে হ্যাঁ, এটি একটি বাগ হতে পারে। যদি তা হয় তবে আপনাকে এসকিউএল এর মাধ্যমে এটি করতে হবে, ডেভের উত্তরের লিঙ্কটি একবার দেখুন।
ChssPly76

ডাউনলোড আমাকে খালি ফাইল দেয়।
অ্যালেক্স এস

6

কেমন

CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2)

postgresql.org উত্তর


4
দুর্ভাগ্যক্রমে, এটি কী, প্রতিবন্ধকতা বা ডিফল্ট সংরক্ষণ করে না।
sudo

4
'WHERE 1 = 2' প্রকাশ করার একটি আরও ভাল উপায় হ'ল 'WHERE মিথ্যা' বা কোনও WHERE ধারা নেই, তবে পরিবর্তে 'LIMIT 0' হবে।
কেনিয়াকর্ন কেটসম্বুট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.