我試圖在具有多個列的架構中通過索引命名來創建新表。通過postgresql中的循環添加多列
CREATE TABLE rflux (pk SERIAL PRIMARY KEY NOT NULL);
現在我想添加新的列像col0 FLOAT,col1,col2,col3 ....直到colN。
我知道我可以這樣做
ALTER TABLE rflux add column col0 FLOAT add column col1 FLOAT ... ;
,但我不想一切都打出來,因爲我需要創建〜4500列。我試圖用循環來實現這一點,但我無法完成它的工作。有沒有人有任何想法?我試圖創建一個函數來做到這一點..
create function addColumns()
returns void
as $$
begin
for i in 1..10 loop
alter table rflux add column tmp float;
alter table rflux rename tmp to col||i;
end loop;
return;
end;
$$
language plpgsql;
然後做 SELECT * FROM addColumns();
但是,當將列重命名爲col || i時,或甚至當我嘗試i時,我都會遇到錯誤。我甚至不確定這是否是最好的方法。如何添加多列,以便我可以使用計數器增加列的名稱?
編輯..我知道我不能用4500列做這個,但是如果我想爲10列做這個問題,這個問題有什麼解決方法呢?
謝謝。
[每表250的最大列 - 1600根據列類型](http://www.postgresql.org/about/) – 2014-12-04 16:31:16
4500列?我想你可能會考慮重新設計你的模式,而不是把你的糟糕設計帶入數據庫。然而,要做你想做的事,你需要在一個存儲過程中使用「動態SQL」......但你可能不應該這樣做。 – JNevill 2014-12-04 16:41:03
我真正想要的是以某種方式將4500個元素的數組存儲到數據庫中。我可以將它作爲一個float []存儲爲一列,或者每個元素都是一個單獨的列。我關心訪問,並通過SQLAlchemy切片數組。據我所知,postgres將數組存儲爲字符串元素{1,2,3}。當它被SQLAlchemy讀入時,它解析這個字符串並將其轉換爲元素列表。我將擁有數百萬行數據,並且需要過濾行的子集,其中某些數組元素滿足給定的條件。所以我認爲第二種方式會更好。 – havok2063 2014-12-04 18:34:22