微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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 举报,一经查实,本站将立刻删除。