मैं PostgreSQL में एक नए कॉलम के लिए स्थिति कैसे निर्दिष्ट कर सकता हूं?


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
@Jonas: तो फिर अपने खुद के विकल्प \ घ जो आप चाहते क्रम में स्तंभों की रिपोर्ट पर लिखें: (यह केवल प्रणाली टेबल पर एक प्रश्न है का उपयोग कर प्रयास 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;

आवश्यकतानुसार अनुक्रमित बनाएँ।


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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.