Изменить тип данных столбца в laravel - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть столбец, который я установил enum ранее, $ table-> enum ('column_name', ['value1', 'value2']);

Теперь я хочу изменить это на строку без потери данные.

Я использую postgres базу данных.

, пожалуйста, помогите мне,

спасибо

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

В простом 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 перезапишет таблицу из-за изменения типа данных.

0 голосов
/ 28 апреля 2020

Вы на самом деле не можете изменить тип столбца enum с простой миграцией

Как я достиг этого, используя DB::statement для изменения типа столбца

DB::statement('ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(200)');

Я не уверен насчет postgres Вы можете изменить запрос в соответствии с вашими потребностями. Сделайте резервную копию 1-го , мы не уверены, что это приведет к потере ваших данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...