我从sqlite3
迁移到postgreSQL
。似乎我在使用ActiveRecord
保存对象时遇到问题。当然,该对象不包含列id
的值,因为它将被生成。这适用于sqlite
。现在,使用postgreSQL
,它给了我这个错误:
错误:
E, [2017-04-21T12:24:51.609161 #1937] ERROR -- : PG::NotNullViolation: ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null, 1, 0003, ---
en: MILL XXX
de: MILL XXX
cn: MILL XXX
fr: MILL XXX
, ---
en: <p>TEST</p>
de: <p>TEST</p>
cn: <p>TEST</p>
fr: <p>TEST<..., --- {}
, 16, null, null, 2017-04-21 12:24:51.600711, 2017-04-21 12:24:51.600711, 7, 7).
: INSERT INTO "models" ("code", "created_at", "created_by", "description", "devicetype_id", "metadata", "realid", "title", "updated_at", "updated_by") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id"
2017-04-21 12:24:51 - ActiveRecord::StatementInvalid - PG::NotNullViolation: ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null, 1, 0003, ---
en: MILL XXX
de: MILL XXX
cn: MILL XXX
fr: MILL XXX
, ---
en: <p>TEST</p>
de: <p>TEST</p>
cn: <p>TEST</p>
fr: <p>TEST<..., --- {}
, 16, null, null, 2017-04-21 12:24:51.600711, 2017-04-21 12:24:51.600711, 7, 7).
: INSERT INTO "models" ("code", "created_at", "created_by", "description", "devicetype_id", "metadata", "realid", "title", "updated_at", "updated_by") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING "id":
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/connection_adapters/postgresql_adapter.rb:834:in `get_last_result'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/connection_adapters/postgresql_adapter.rb:834:in `block in exec_cache'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/connection_adapters/abstract_adapter.rb:378:in `block in log'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/connection_adapters/abstract_adapter.rb:372:in `log'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/connection_adapters/postgresql_adapter.rb:831:in `exec_cache'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/connection_adapters/postgresql/database_statements.rb:138:in `exec_query'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/connection_adapters/postgresql/database_statements.rb:177:in `exec_insert'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/connection_adapters/abstract/database_statements.rb:95:in `insert'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `insert'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/relation.rb:64:in `insert'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/persistence.rb:504:in `_create_record'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/attribute_methods/dirty.rb:87:in `_create_record'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/callbacks.rb:306:in `block in _create_record'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:113:in `call'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:113:in `call'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:552:in `block (2 levels) in compile'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:502:in `call'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:502:in `call'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:86:in `run_callbacks'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/callbacks.rb:306:in `_create_record'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/timestamp.rb:57:in `_create_record'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/persistence.rb:484:in `create_or_update'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/callbacks.rb:302:in `block in create_or_update'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:113:in `call'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:113:in `call'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:552:in `block (2 levels) in compile'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:502:in `call'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:502:in `call'
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.16/lib/active_support/callbacks.rb:86:in `run_callbacks'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/callbacks.rb:302:in `create_or_update'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/persistence.rb:125:in `save!'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/validations.rb:57:in `save!'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/attribute_methods/dirty.rb:29:in `save!'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/transactions.rb:273:in `block in save!'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/transactions.rb:329:in `block in with_transaction_returning_status'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/connection_adapters/abstract/database_statements.rb:199:in `transaction'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/transactions.rb:208:in `transaction'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/transactions.rb:326:in `with_transaction_returning_status'
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.16/lib/active_record/transactions.rb:273:in `save!'
现在,这是我的架构:
schema.rb
# encoding: UTF-8
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170410120128) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
enable_extension "adminpack"
create_table "activechecktypes", force: true do |t|
t.integer "model_id", limit: 8
t.integer "checktype_id", limit: 8
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
add_index "activechecktypes", ["checktype_id"], name: "fki_fk_activechecktype_checktype_id", using: :btree
add_index "activechecktypes", ["model_id"], name: "fki_fk_activechecktype_model_id", using: :btree
create_table "activeprocedures", force: true do |t|
t.integer "model_id", limit: 8
t.integer "procedure_id", limit: 8
t.text "flowcontrol"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.integer "seqnum", limit: 8, null: false
t.integer "enforce", limit: 8, null: false
end
add_index "activeprocedures", ["model_id"], name: "fki_fk_activeprocedures_model_id", using: :btree
add_index "activeprocedures", ["procedure_id"], name: "fki_fk_activeprocedures_procedure_id", using: :btree
create_table "affiliations", force: true do |t|
t.integer "user_id", limit: 8
t.integer "usergroup_id", limit: 8
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
add_index "affiliations", ["user_id"], name: "fki_fk_affiliations_user_id", using: :btree
add_index "affiliations", ["usergroup_id"], name: "fki_fk_affiliations_usergroup_id", using: :btree
create_table "binaryfiles", force: true do |t|
t.string "filename"
t.string "original_filename"
t.string "hexhash"
t.string "mimetype"
t.integer "size", limit: 8
t.text "metadata"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
create_table "checks", force: true do |t|
t.integer "unit_id", limit: 8, null: false
t.integer "model_id", limit: 8, null: false
t.integer "checktype_id", limit: 8, null: false
t.text "comment"
t.date "scheduled"
t.date "dueby"
t.date "started"
t.date "finished"
t.integer "status", limit: 8
t.text "metadata"
t.text "checkdata"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.float "progress_finished", default: 0.0, null: false
t.float "progress_error", default: 0.0, null: false
t.text "assign_data"
end
add_index "checks", ["checktype_id"], name: "fki_fk_checks_checktype_id", using: :btree
add_index "checks", ["model_id"], name: "fki_fk_checks_model_id", using: :btree
add_index "checks", ["unit_id"], name: "fki_fk_checks_unit_id", using: :btree
create_table "checktypes", force: true do |t|
t.string "code", null: false
t.text "title", null: false
t.text "description"
t.text "metadata"
t.boolean "deleted", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
create_table "configentries", force: true do |t|
t.integer "code_id", limit: 8
t.integer "configtable_id", limit: 8
t.boolean "active"
t.boolean "deleted"
t.string "col1"
t.string "col2"
t.string "col3"
t.string "col4"
t.string "col5"
t.string "col6"
t.text "blocked_by"
t.boolean "blocked"
t.text "timeline"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
add_index "configentries", ["configtable_id"], name: "fki_fk_configentries_configtable_id", using: :btree
create_table "configtables", force: true do |t|
t.string "title"
t.string "parent"
t.integer "parentid", limit: 8
t.string "parentcode"
t.string "colheader1"
t.string "colheader2"
t.string "colheader3"
t.string "colheader4"
t.string "colheader5"
t.string "colheader6"
t.text "timeline"
t.boolean "editable", null: false
t.boolean "deleted", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
create_table "datachanges", force: true do |t|
t.integer "source_id"
t.string "source_type"
t.string "subobject", null: false
t.string "subobjtype", null: false
t.string "changetype", null: false
t.text "changedetails"
t.integer "user"
t.integer "timestamp"
t.boolean "post_finalize"
t.boolean "dirty"
end
create_table "devicetypes", force: true do |t|
t.string "code", null: false
t.text "title", null: false
t.text "description"
t.text "metadata"
t.boolean "deleted", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
create_table "documents", force: true do |t|
t.integer "owner_id", limit: 8
t.string "owner_type"
t.integer "binaryfile_id", limit: 8
t.string "caption"
t.integer "doctype", limit: 8
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.integer "seqnum", limit: 8, null: false
end
add_index "documents", ["binaryfile_id"], name: "fki_fk_documents_binaryfile_id", using: :btree
create_table "grants", force: true do |t|
t.integer "grantee_id", limit: 8
t.string "grantee_type"
t.integer "privilege_id", limit: 8
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
add_index "grants", ["privilege_id"], name: "fki_fk_grants_privilege_id", using: :btree
create_table "images", force: true do |t|
t.integer "owner_id", limit: 8
t.string "owner_type"
t.integer "fullimage_id", limit: 8
t.integer "preview_id", limit: 8
t.integer "thumbnail_id", limit: 8
t.string "caption"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.integer "seqnum", limit: 8, null: false
end
add_index "images", ["fullimage_id"], name: "fki_fk_images_binaryfiles_id", using: :btree
add_index "images", ["preview_id"], name: "fki_fk_images_preview_binaryfiles_id", using: :btree
add_index "images", ["thumbnail_id"], name: "fki_fk_images_thumb_binaryfiles_id", using: :btree
create_table "measurements", force: true do |t|
t.integer "check_id", limit: 8, null: false
t.integer "measure_id", limit: 8, null: false
t.integer "toolunit_id", limit: 8
t.text "rawvalues"
t.string "value"
t.string "comment"
t.integer "status", limit: 8, null: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.text "metadata"
t.integer "savedon", limit: 8
t.integer "savedby", limit: 8
end
add_index "measurements", ["check_id"], name: "fki_fk_measurements_check_id", using: :btree
add_index "measurements", ["toolunit_id"], name: "fki_fk_measurements_toolunit_id", using: :btree
create_table "measures", force: true do |t|
t.integer "step_id", limit: 8, null: false
t.integer "tooltype_id", limit: 8
t.string "code", null: false
t.text "title", null: false
t.text "description"
t.integer "measuretype", limit: 8, null: false
t.text "calculation", null: false
t.text "metadata"
t.text "flowcontrol"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.integer "seqnum", limit: 8, null: false
t.integer "enforce", limit: 8, null: false
end
add_index "measures", ["step_id"], name: "fki_fk_measures_step_id", using: :btree
create_table "models", force: true do |t|
t.integer "devicetype_id", limit: 8, null: false
t.string "code", null: false
t.text "title", null: false
t.text "description"
t.text "metadata"
t.integer "realid", limit: 8, null: false
t.integer "version", limit: 8
t.boolean "disabled", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
add_index "models", ["devicetype_id"], name: "fki_fk_models_devicetype_id", using: :btree
create_table "notices", force: true do |t|
t.string "text"
t.integer "category_id", limit: 8, null: false
t.text "path"
t.string "artno"
t.string "artdesc"
t.integer "timeloss", limit: 8
t.integer "status", limit: 8
t.text "timeline"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
create_table "privileges", force: true do |t|
t.string "name", null: false
t.text "description"
t.string "code", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
create_table "procedures", force: true do |t|
t.string "code", null: false
t.text "title", null: false
t.text "description"
t.text "metadata"
t.text "flowcontrol"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.integer "realid", limit: 8, null: false
t.integer "version", limit: 8
t.boolean "disabled", null: false
t.text "tag_1"
t.text "tag_2"
t.text "tag_3"
t.text "tag_4"
t.text "tag_5"
t.text "tag_6"
end
create_table "settings", force: true do |t|
t.string "key"
t.string "value"
t.integer "seqnum", limit: 8
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.string "sub_values"
end
create_table "snippets", force: true do |t|
t.string "category"
t.string "text"
t.integer "status", limit: 8
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.integer "seqnum", limit: 8, null: false
end
create_table "sqlite_sequence", id: false, force: true do |t|
t.text "name"
t.text "seq"
end
create_table "steps", force: true do |t|
t.integer "procedure_id", limit: 8, null: false
t.string "code", null: false
t.text "title", null: false
t.text "description"
t.text "metadata"
t.text "flowcontrol"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.integer "seqnum", limit: 8, null: false
t.integer "enforce", limit: 8, null: false
t.integer "steptype", limit: 8
end
add_index "steps", ["procedure_id"], name: "fki_fk_steps_procedure_id", using: :btree
create_table "tooltypes", force: true do |t|
t.string "code", null: false
t.text "title", null: false
t.text "description"
t.text "metadata"
t.boolean "deleted", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
create_table "toolunits", force: true do |t|
t.integer "tooltype_id", limit: 8, null: false
t.string "code", null: false
t.text "comment"
t.text "metadata"
t.boolean "deleted", null: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
add_index "toolunits", ["tooltype_id"], name: "fki_fk_toolunits_tooltype_id", using: :btree
create_table "units", force: true do |t|
t.integer "model_id", limit: 8, null: false
t.string "code", null: false
t.string "customer"
t.text "comment"
t.date "commissioned"
t.date "finished"
t.date "delivered"
t.date "approved"
t.integer "status", limit: 8
t.text "metadata"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
end
add_index "units", ["model_id"], name: "fki_fk_units_model_id", using: :btree
create_table "usergroups", force: true do |t|
t.string "name", null: false
t.integer "level", limit: 8
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.boolean "deleted", null: false
end
create_table "users", force: true do |t|
t.string "username", null: false
t.string "passhash", null: false
t.text "realname", null: false
t.text "comment"
t.text "userinfo"
t.integer "status", limit: 8, null: false
t.datetime "created_at"
t.datetime "updated_at"
t.string "created_by", null: false
t.string "updated_by", null: false
t.text "metadata"
t.text "dashboardinfo"
end
end
如果您需要任何进一步的信息,请与我们联系。
答案 0 :(得分:0)
唯一缺少的是架构中的, id: :serial
。
create_table "models", id: :serial, force: true do |t|
您可以在schema.rb
文件中手动修复此问题,然后运行
rake db:schema:load
PS:必须要说的是,手动编辑schema.rb
文件通常不是可行的方法,但如果你不在生产数据库上工作,那么这样做是没有害处的。