Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление столбца из таблицы / 3 сообщений из 3, страница 1 из 1
22.08.2018, 13:12
    #39691711
Visermoz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление столбца из таблицы
Здравствуйте.
Прочитал в документации:
Код: plaintext
1.
2.
3.
Форма DROP COLUMN не удаляет столбец физически, а просто делает его невидимым для операций SQL. При последующих операциях добавления или изменения в этот столбец будет записываться значение NULL. Таким образом, удаление столбца выполняется быстро, но при этом размер таблицы на диске не уменьшается, так как пространство, занимаемое удалённым столбцом, не высвобождается. Это пространство будет освобождено со временем, по мере изменения существующих строк. (При удалении системного столбца oid это поведение не наблюдается, так как немедленно выполняется перезапись таблицы.)

Чтобы принудительно высвободить пространство, занимаемое столбцом, который был удалён, можно выполнить одну из форм ALTER TABLE, производящих перезапись всей таблицы. В результате все строки будут воссозданы так, что в удалённом столбце будет содержаться NULL.

Я провел такой эксперимент. Использовал то, что в таблице в PostgreSQL может быть максимально 1600 столбцов.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
--Создаю пустую таблицу
create table test();

--Добавляю 1600 столбцов
do
$$
declare
	rec record;
begin
	for rec in(select generate_series(1,1600) as num)
	loop
		raise info '%',rec.num;
		execute 'alter table test add c'||rec.num||' integer';
	end loop;
end$$;

--Удаляю 3 столбца
alter table test drop c1;
alter table test drop c2;
alter table test drop c3;

--делаю 
vacuum(full) test;
truncate table test;


Но следующие команды всё равно ругаются и не дают добавить новый столбец, т.к. в таблице всё равно их 1600 на смотря на удаление.
Код: sql
1.
2.
alter table test add t1 text;
ERROR:  tables can have at most 1600 columns


То есть команды vacuum(full) и truncate только освобождают место, а столбец уже никогда не удалится и их количество не уменьшится?
Можно ли как-то действительно удалить столбец или это можно сделать только пересозданием таблицы?
...
Рейтинг: 0 / 0
22.08.2018, 13:25
    #39691724
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление столбца из таблицы
Visermoz,

Только полное пересоздание.
А в доке про место занятое а не про удаление остатков самого столбца полностью.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
22.08.2018, 13:58
    #39691749
Visermoz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление столбца из таблицы
Maxim Boguk, спасибо за ответ
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление столбца из таблицы / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]