Rails sqlserver架构转储不生成非身份pk的主键

时间:2013-05-08 14:48:51

标签: ruby-on-rails sql-server sql-server-2008

给出这两个表

CREATE TABLE [dbo].[ASTROLOGY_SIGN](
  [SIGN_ID] [int] NOT NULL,
 CONSTRAINT [PK_ASTROLOGY_SIGN] PRIMARY KEY NONCLUSTERED 


CREATE TABLE [dbo].[ACTIVITY_MASTER](
  [ACTIVITY_ID] [int] IDENTITY(1,1) NOT NULL,
 CONSTRAINT [PK_ACTIVITY_MASTER] PRIMARY KEY NONCLUSTERED 

rails在schema.rb

中生成以下两个条目
create_table "ASTROLOGY_SIGN", :id => false, :force => true do |t|
create_table "ACTIVITY_MASTER", :primary_key => "ACTIVITY_ID", :force => true do |t|

尝试使用模式从sqlserver移动到postgres但这给了我一些问题。有很多表,宁愿不必手工编辑。

1 个答案:

答案 0 :(得分:1)

朋友可以帮你... 您的表及其在SQLServer中的列有一些关系作为连接关系。看:

select * from INFORMATION_SCHEMA.TABLES join INFORMATION_SCHEMA.COLUMNS on 
INFORMATION_SCHEMA.TABLES.TABLE_NAME = INFORMATION_SCHEMA.COLUMNS.TABLE_NAME

有了所有这些信息,你可以编写一个程序来转换它们。 我的意思是你可以访问有关你的表和列的信息,然后用字符串替换它们,在 postgres 查询的字符串.look:

for(every table in INFORMATION_SCHEMA.TABLES )
{
    string postgres_query = "create_table " + TABLE_NAME + ", :id => false, :force => true do |t|"
    exec(postgres_query)
}

然后为每个表执行数据中心(postgres)。当然你必须把它优化到你想要的东西。你知道这不是正确的代码