我试图在具有多个列的架构中通过索引命名来创建新表。通过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