【发布时间】:2011-01-17 02:20:10
【问题描述】:
如何使用迁移来创建 postgres 序列?
我创建了一个包含以下执行的迁移文件:
execute 'CREATE SEQUENCE "ServiceAvailability_ID_seq";'
execute <<-SQL
ALTER TABLE "ServiceAvailability"
ALTER COLUMN "ID" set DEFAULT NEXTVAL("ServiceAvailability_ID_seq")
SQL
但是,在运行 rake db:migrate 时出现以下错误:
PGError:错误:列“ServiceAvailability_ID_seq”不存在 :更改表“服务可用性” ALTER COLUMN "ID" 设置 DEFAULT NEXTVAL("ServiceAvailability_ID_seq")
第二个问题,rake db:schema:dump 旨在创建一个可移植地用于任何数据库的文件,但是,在调查 schema:dump 时,它似乎只包含表、字段和字段类型信息并且错过了索引和序列?
【问题讨论】:
-
为什么还要手动创建序列?当 rails 创建
id列时,它会将其键入为serial,这会创建一个隐式序列。而且 rails 应该可以很好地读取索引。 -
No rails 不会将 id 列输入为序列,而是输入为整数并应用序列。 [Postgresql 官方][1] doc 解释说是一样的。例如:CREATE TABLE nom_de_table (nom_de_colonne SERIAL);与 CREATE SEQUENCE nom_de_table_nom_de_colonne_seq 相同;创建表 nom_de_table ( nom_de_colonne integer NOT NULL DEFAULT nextval('nom_de_table_nom_de_colonne_seq') NOT NULL ); ALTER SEQUENCE nom_de_table_nom_de_colonne_seq OWNED BY nom_de_table.nom_de_colonne; [1]: docs.postgresqlfr.org/9.1/datatype.html#datatype-numeric
标签: ruby-on-rails heroku