পোস্টগ্র্রেএসকিউএল-তে নতুন কলামের অবস্থান কীভাবে নির্দিষ্ট করতে পারি?


74

যদি কলামগুলির সাথে আমার একটি টেবিল থাকে:

id | name | created_date

এবং আমি একটি কলাম যুক্ত করতে চাই:

alter table my_table add column email varchar(255)

তারপরে কলামটি কলামের পরে যুক্ত করা হবে created_date

নতুন কলামের জন্য অবস্থানটি নির্দিষ্ট করার কোনও উপায় আছে কি? যেমন আমি এটি পরে যুক্ত করতে nameএবং একটি টেবিল পেতে পারেন:

id | name | email | created_date

4
তা করার দরকার নেই। আপনি যেভাবে চান সেগুলি কেবল সেগুলি আপনার নির্বাচিত বিবৃতিতে রেখে দিন।
a_horse_with_no_name

@ জোনাস যাতে আপনি এটি তৈরি করতে পারেন যাতে এই ক্রমটি হয় view... প্রযুক্তিগতভাবে কলামের অবস্থানের বিষয়টি বিবেচনা করা উচিত না কারণ আপনি কোনও প্রশ্নের সাথে কোনও ক্রমে তাদের সংজ্ঞায়িত করতে পারেন ... এবং আপনি সাধারণত একটি কাজ করছেন নাselect *
xenoterracide

2
@a_horse: ওয়েল, কলামগুলিতে অনেকগুলি আলাদা অর্ডার থাকলে টেবিলগুলি সহ কাজ করা (বিকাশকারী / প্রশাসক হিসাবে) কাজ করা অনেক বেশি শক্ত। যখন আমার একটি টেবিলের 15 টি কলাম থাকে তখন আমি সমস্ত ডাটাবেসে একই ক্রমে থাকতে পছন্দ করি।
জোনাস

2
@ জোনাস আপনি সন্নিবেশ এবং আপডেটগুলি করার সময় কলামের নামগুলি সংজ্ঞায়িত করতে পারেন এবং অর্ডারটিকে অপ্রাসঙ্গিক করতে পারেন।
xenoterracide

2
@ জোনাস: তারপরে আপনার নিজস্ব বিকল্পটি \ d লিখুন যা কলামগুলি আপনার পছন্দ অনুযায়ী ক্রম হিসাবে রিপোর্ট করে (এটি কেবলমাত্র সিস্টেম টেবিলগুলির মধ্যে একটি প্রশ্ন: psql -Eআসল অনুসন্ধানটি দেখার জন্য স্যুইচটি ব্যবহার করে দেখুন)
জ্যাক ডগলাস

উত্তর:


54

ALTER TABLE ADD COLUMNশেষটি হিসাবে কেবল নতুন কলামটি যুক্ত হবে। অন্য অবস্থানে একটি নতুন কলাম তৈরি করতে আপনাকে এই নতুন সারণীতে পুরানো / বর্তমান সারণী থেকে টেবিলটি পুনরায় তৈরি করতে হবে এবং ডেটা অনুলিপি করতে হবে।



4
এটা ঠিক .. তবে আসলেই কি কেউ এই পদ্ধতিটি ব্যবহার করে? :-)
মারিয়ান

2
যদি টেবিলটি এবং সমস্ত শিশুদের টেবিল , বিদেশী কী এবং অনুদানগুলি পুনরুদ্ধার করা সহজ হয় তবে আমি ভেবেছিলাম যে লিঙ্কটি যে কোনও উপায়ে কার্যকর হতে পারে কারণ এটি আপনার অবস্থান নির্দিষ্ট করতে না পারার ব্যাখ্যা দেয় এবং আশা করি যে এটি কার্যকর করা হতে পারে ভবিষ্যতের সংস্করণ
জ্যাক ডগলাস

22

আপনি যদি একটি নির্দিষ্ট ক্রম চান তবে আপনাকে টেবিলটি পুনরায় তৈরি করতে হবে। যেমন কিছু করুন:

alter table tablename rename to oldtable;
create table tablename (column defs go here);
insert into tablename (col1, col2, col3) select col2, col1, col3 from oldtable;

প্রয়োজন অনুসারে সূচি তৈরি করুন etc.


2

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

create table my_table (
create view view_my_table as
  select id, name, created_date from my_table;

-- adding a new column
begin;
alter table my_table add column email varchar(255);
drop view view_my_table;
create view view_my_table as
  select id, name, email, created_date from my_table;
commit;

অন্যান্য সমস্ত উদ্দেশ্যে (যেমন সন্নিবেশ, ইউনিয়ন) সর্বদা কলাম তালিকা নির্দিষ্ট করা ভাল।

-- bad
insert into my_table values (...);
(select * from my_table)
  union all
(select * from my_table);

-- good
insert into my_table (id, name, email, created_date) values (...);
(select id, name, email, created_date from my_table)
  union all
(select id, name, email, created_date from my_table);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.