2010-02-15 51 views
1

如何使用迁移创建postgres序列?如何使用迁移创建postgres序列?

我创建了一个迁移文件,下面执行:

execute 'CREATE SEQUENCE "ServiceAvailability_ID_seq";' 
execute <<-SQL 
    ALTER TABLE "ServiceAvailability" 
    ALTER COLUMN "ID" set DEFAULT NEXTVAL("ServiceAvailability_ID_seq") 
SQL 

但是,运行耙分贝时:迁移,我发现了以下错误:

PGError: ERROR: column "ServiceAvailability_ID_seq" does not exist : ALTER TABLE "ServiceAvailability" ALTER COLUMN "ID" set DEFAULT NEXTVAL("ServiceAvailability_ID_seq")

第二个问题,耙分贝:schema:dump是为了创建一个可以用于任何数据库的文件,然而,在调查一个模式时:转储它似乎只包含表,字段和字段类型信息,并且遗漏了索引和序列?

+0

为什么你要手动创建序列呢?当rails创建'id'列时,它将其输入为'serial',这会创建一个隐式序列。而轨应该读索引就好了。 – ryeguy 2010-05-19 14:26:00

+0

没有rails不会将id列键入为串行,而是以整数形式应用序列。 [Postgresql官方] [1] doc解释说它是一样的。例如:* CREATE TABLE nom_de_table( nom_de_colonne SERIAL * );与* CREATE SEQUENCE nom_de_table_nom_de_colonne_seq相同; CREATE TABLE 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]:http://docs.postgresqlfr.org/9.1/datatype.html#datatype-numeric – Douglas 2012-12-20 11:38:20

回答

1

这个工作

execute 'CREATE SEQUENCE ServiceAvailability_ID_seq;' 
execute <<-SQL 
    ALTER TABLE "ServiceAvailability" 
    ALTER COLUMN "ID" set DEFAULT NEXTVAL('ServiceAvailability_ID_seq'); 
SQL 
+0

为了让我的工作,我必须删除双引号他们出现在哪里。 – 2017-12-12 23:56:41

-4

其实,如果你改变你的分贝到MySQL或任何其他数据库(支持轨),你将面对的问题,你不应该使用迁移这样的,在未来。请检查下面给出的链接上的Ruby on Rails指南。

http://guides.rubyonrails.org/migrations.html

+1

由于使用了序列,这已经是Postgres特有的请求。 – nirvdrum 2012-01-17 03:46:27