当前位置: 首页 > 知识库问答 >
问题:

sqlite的Rails 5 uuid问题

胡越
2023-03-14

我正在转换我的rails 5.1应用程序,开始使用UUID而不是增量id作为默认的active_record。

我已将迁移文件更改为使用 id: :uuid

class CreateProjects < ActiveRecord::Migration[5.1]
  def change
    create_table :projects, id: :uuid do |t|
      t.string :title
      t.text :description

      t.timestamps
    end
  end
end

我添加了一个迁移文件来支持“uuid-ossp”和“pgcrypto”,因为我打算在prod中使用pg。

class EnablePgcryptoExtension < ActiveRecord::Migration[5.1]
  def change
    enable_extension 'uuid-ossp'
    enable_extension 'pgcrypto'
  end
end

但是当我尝试创建一个对象时,我得到一个错误,就好像id为空一样。

< code > active record::NotNullViolation:SQLite3::constraint exception:NOT NULL约束失败:projects . id:INSERT INTO " projects "(" created _ at "," updated_at ")值(?, ?)

模式。rb提示“uuid”不是已知类型

# Could not dump table "projects" because of following StandardError
#   Unknown type 'uuid' for column 'id'

我建议我可以开始在sqlite3中使用字符串类型而不是uuid,但我打算在生产中使用postgres,并且希望使用uuid。

我应该在dev中使用pg还是有其他方法?

共有2个答案

贝滨海
2023-03-14

我用Rails 5.2.1和sqlite3让它工作起来。

以下是您需要的(请参阅此):

# config/application.rb
config.generators do |g|
  g.orm :active_record, primary_key_type: :uuid
end

仅通过以上内容,我得到了与插入到sqlite3时相同的约束违例op。解决方法是这样的(见这个和相关的帖子)

# add this require in config/application.rb
require 'active_record/connection_adapters/sqlite3_adapter'
艾修筠
2023-03-14

SQLite不是一个通用数据库,也没有完全实现SQL-92。您应该只将SQLite用于其设计目的(主要是启用软件、缓存等)。

如果你在SQLite中使用UUID,你会明白SQLite没有真正的< code>UUID类型(一个< code>BLOB(16)是最好的选择)。

就像穆说的太短了,你的开发平台和生产平台必须使用同一个环境,否则你会面临很多麻烦...

 类似资料:
  • 问题内容: 我尝试在sqlite数据库上使用正则表达式和python检查带有模式的字符串。当我尝试使用具有“的模式”的de搜索字符串时出现问题,例如: 我应该在正则表达式之前以其他方式编译器不喜欢…语法错误 有人知道该怎么做吗? 我的正则表达式函数:con.create_function(“ regexp”,2,regexp) 问题答案: 使用参数化的sql。然后,您无需自己转义引号: 产量

  • 构建一个基本的基于sqlite的登录/注册应用程序。点击登录后App崩溃。 有什么想法吗? databaseHelper.java: display.java: contact.java:

  • 我在更新Blob时遇到了一个问题,问题是不执行,但是,如果我取出与Blob相关的所有内容来更新Blob,其他内容也会更新,如ID、名称、地址等,所有内容都能正常工作,问题只是与Blob有关。 编辑- 但是,我可以插入和删除blob文件以及检索。只是这次更新给了我一个问题。

  • 问题内容: 我们正在Swift中的iOS中实现SQLite,而不使用包装器或Objective- C桥接。一切正常,除非进行查询并提取结果。问题是从Swift中的SQLite返回的,如下所示: 如您所见,如果知道对象的长度(在本例中为10),则可以将指针转换为String。 为了深入研究这个问题,我有以下示例 鉴于这是的别名,我可以将转换为using ,然后再转换为using 问题是我的SQLit

  • SQLite是一种基于模式的轻量级关系数据库引擎。 它是用于Web浏览器中本地存储的嵌入式数据库软件的流行选择。 与许多其他数据库管理系统不同,SQLite不是客户端 - 服务器数据库引擎。 有关更多信息,请阅读我们的 SQLite教程 在本章中,您将学习如何使用CoffeeScript与SQLite数据库进行通信。 安装 (Installation) 可以使用node-sqlite3模块将SQL

  • 我可以再次使用一些帮助,出于想法。:(我正在制作将使用SQLite数据库的JavaFX应用程序。使用OpenJDK 14和OpenJFX14。在我的Eclipse中,一切都运行良好。我尝试测试使用JPackage制作安装程序,这也有效。当我开始安装应用程序时,它启动正常,但出于某种原因拒绝与数据库连接。 以下是我的项目结构: 我有一个按钮,当阶段加载时,我检查连接。它位于PocetnaContro