Я пытаюсь создать новую таблицу в схеме, которая имеет несколько столбцов, названных через индекс.Добавление нескольких столбцов через цикл в 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 столбцов, скажем?
Спасибо.
[Maximum колонок в таблице 250 - 1600 в зависимости от типов столбцов] (http://www.postgresql.org/about/) –
4500 Колонны ?? Я думаю, вы можете подумать о том, чтобы перепроектировать вашу схему, а не обучать ваш плохой дизайн в вашей БД. Однако, чтобы делать то, что вы хотите, вы захотите использовать «динамический SQL» в хранимой процедуре ... но вы, вероятно, не должны этого делать. – JNevill
Что я на самом деле хочу, так это хранить массивы 4500 элементов в базе данных. Я могу сохранить его как один столбец как float [] или где каждый элемент является отдельным столбцом. Меня беспокоит доступ и разбиение массива с помощью SQLAlchemy. Насколько я понимаю, postgres хранит массивы в виде строковых элементов {1,2,3}. Когда это считывается SQLAlchemy, он анализирует эту строку и преобразует ее в список элементов. У меня будет миллионы строк данных, и вам нужно будет фильтровать подмножества строк, где определенные элементы массивов удовлетворяют заданному условию. Поэтому я подумал, что второй способ будет лучше. – havok2063