在 pg 列从文本到二进制 (bytea) 的 Rails 迁移中,如何解决“bytea 类型的输入序列无效”?

问题描述

我有一个带有 pg 数据库的 Rails 应用程序,其中一个表中“输入”列的类型是文本。我发现我的一些输入文件不是任何特定的文本编码,因此需要将它们视为二进制数据。

因此,我创建了一个迁移:

#if __has_include(<unistd.h>)
    // System is posix-compliant
#else
    // System is not posix-compliant
#endif

但是,当我运行此迁移时,我得到:

class ChangeProgramsColumnsInputOutputToBinary < ActiveRecord::Migration[6.0]
  def change
    change_column :programs,:input,'bytea USING input::bytea'
  end
end

Postgresql 似乎不喜欢从 text 列到 bytea 的类型转换。但这是为什么呢? bytea 是否足够通用以表示文本列中包含的任何内容?为什么演员表失败了?

我想可能有一些特定的语法可以诱使 pg 执行此转换,但我无法在 pg 文档中找到它。

--------更新-----------

我试过了,但它正在截断二进制文件

-- change_column(:programs,"bytea USING input::bytea")
rails aborted!
StandardError: An error has occurred,this and all later migrations canceled:

PG::InvalidTextRepresentation: ERROR:  invalid input Syntax for type bytea

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)