У меня есть столбец, который я установил enum ранее, $ table-> enum ('column_name', ['value1', 'value2']);
Теперь я хочу изменить это на строку без потери данные.
Я использую postgres базу данных.
, пожалуйста, помогите мне,
спасибо
В простом SQL решение больше похоже на "ALTER TABLE table_name ALTER COLUMN column_name SET DATA TYPE VARCHAR (20)".
Например:
postgres=# create table tenum(x serial, y enumval); CREATE TABLE postgres=# select relfilenode from pg_class where relname='tenum'; relfilenode ------------- 61038 (1 row) postgres=# insert into tenum(y) values ('val1'); INSERT 0 1 postgres=# insert into tenum(y) values ('val2'); INSERT 0 1 postgres=# select * from tenum; x | y ---+------ 1 | val1 2 | val2 (2 rows) postgres=# alter table tenum alter column y set data type varchar(20); ALTER TABLE postgres=# select relfilenode from pg_class where relname='tenum'; relfilenode ------------- 61042 (1 row) postgres=# select * from tenum; x | y ---+------ 1 | val1 2 | val2 (2 rows) postgres=#
Обратите внимание, что PostgreSQL перезапишет таблицу из-за изменения типа данных.
Вы на самом деле не можете изменить тип столбца enum с простой миграцией
Как я достиг этого, используя DB::statement для изменения типа столбца
DB::statement
DB::statement('ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(200)');
Я не уверен насчет postgres Вы можете изменить запрос в соответствии с вашими потребностями. Сделайте резервную копию 1-го , мы не уверены, что это приведет к потере ваших данных .
postgres