我的数据库中有一个文本列,用于存储pickled python数据。这当然成了一个问题,因为这个腌制数据在被存储时被解码为UTF-8,偶尔会引起问题。
我想将列的类型更改为二进制数据类型bytea
以正确存储此数据。为了测试所有当前存储的数据是否可以转换,我运行了以下查询:
SELECT text_column::bytea as result FROM table;
哪个没有问题。但是,尝试使用查询来更改列的类型:
ALTER TABLE table ALTER COLUMN text_column TYPE bytea USING text_column::bytea;
导致错误:
ERROR: invalid input syntax for type bytea
类似地:
ALTER TABLE table ALTER COLUMN text_column TYPE bytea USING CAST(text_column AS bytea);
为了测试这实际上是一个语法错误我转换为文本没有任何问题:
ALTER TABLE table ALTER COLUMN text_column TYPE text USING CAST(text_column AS text);
此时我还不确定在选择结果时如果我可以毫无问题地投射,问题是什么。该列没有默认值。我现在唯一的想法是创建一个包含已转换值的临时表,删除列,将其作为bytea列添加回来并返回已转换的值。但我仍然想知道原始语法错误的原因是什么?