Php Yii2&;PostreSQL:如何将列类型从字符串更改为jsonb?

Php Yii2&;PostreSQL:如何将列类型从字符串更改为jsonb?,php,postgresql,yii2,Php,Postgresql,Yii2,在表中,我有一个列“language”,它是字符串类型,存储诸如“en”、“ru”等值。现在我需要存储多个值,例如:[“en”、“ru”]。所以,我决定创建类型为jsonb的新列“languageb”,并删除“language”列。重要的是,“language”列的当前值必须保存到“languageb”列。我的意思是,如果列“language”的值是“en”,那么列“languageb”的值必须保存为[“en”]。 因此,我尝试创建新的迁移: Yii::$app->db->creat

在表中,我有一个列“language”,它是字符串类型,存储诸如“en”、“ru”等值。现在我需要存储多个值,例如:[“en”、“ru”]。所以,我决定创建类型为jsonb的新列“languageb”,并删除“language”列。重要的是,“language”列的当前值必须保存到“languageb”列。我的意思是,如果列“language”的值是“en”,那么列“languageb”的值必须保存为[“en”]。 因此,我尝试创建新的迁移:

Yii::$app->db->createCommand("UPDATE ".$this->tableName." SET languageb = language")->execute();
错误是:

Exception: SQLSTATE[42804]: Datatype mismatch: 7 ERROR:  column "languageb" is of type jsonb but expression is of type character varying

在影响列语言之前,必须将其转换为jsonb

试试这样:

Yii::$app->db->createCommand("UPDATE ".$this->tableName." SET languageb = language::jsonb[]")->execute();

有关强制转换的更多信息,请参见postgres文档:

在影响列语言之前,必须将其转换为jsonb

试试这样:

Yii::$app->db->createCommand("UPDATE ".$this->tableName." SET languageb = language::jsonb[]")->execute();

有关强制转换的更多信息,请参阅postgres文档:

Exception:SQLSTATE[22P02]:无效文本表示:7错误:类型json的输入语法无效详细信息:标记“ru”无效。CONTEXT:JSON数据,第1行:在这种情况下,JSONB值的ruArray对我来说不是一个好的设计。我要么使用JSONB数组(这不一样),要么使用文本数组。OP报告的错误意味着您不能将任何文本值强制转换为JSON或数组(JSON或其他)。异常:SQLSTATE[22P02]:无效文本表示:7错误:类型JSON的无效输入语法详细信息:标记“ru”无效。CONTEXT:JSON数据,第1行:在这种情况下,JSONB值的ruArray对我来说不是一个好的设计。我要么使用JSONB数组(这不一样),要么使用文本数组。OP报告的错误意味着您不能将任何文本值强制转换为JSON或数组(JSON或其他)。