在表中,我有一个列“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文档,以获取有关铸造的更多信息:https://www.postgresql.org/docs/9.4/datatype-json.html