powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление столбца из таблицы
3 сообщений из 3, страница 1 из 1
Удаление столбца из таблицы
    #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
Удаление столбца из таблицы
    #39691724
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Visermoz,

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

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


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