Ошибка при установке составного первичного ключа в SQLite3

Я хотел бы установить Первичный ключ табе, который я строю, как составной ключ из 3 целых чисел. Я делаю это в сценарии Ruby следующим образом:

  ...Ruby Script
  .............

  .............
  #Begin database operations
  begin
  db = SQLite3::Database.new ("#{filename.split('.')[0]}" + ".db")

  db.execute ("CREATE TABLE IF NOT EXISTS AIRED (programCode INTEGER , fromDate INTEGER, 
  toDate INTEGER, PRIMARY KEY(programCode,fromDate , toDate), program TEXT, channel  TEXT, 
   weekday TEXT, startTime TEXT, endTime TEXT, duration TEXT)")

  rescue SQLite3::Exception => e
  puts "Exception occured"
  puts e.message
  puts e.backtrace

  ensure
  db.close if db

  end

   .........

Когда я запускаю этот скрипт, я получаю следующую ошибку в Терминале

      Exception occured
      near "program": syntax error
      /Users/AM/.rvm/gems/ruby-2.0.0-p195/gems/sqlite3-1.3.7/lib/sqlite3/database.rb:91:in `initialize'
      /Users/AM/.rvm/gems/ruby-2.0.0-p195/gems/sqlite3-1.3.7/lib/sqlite3/database.rb:91:in `new'
     /Users/AM/.rvm/gems/ruby-2.0.0-p195/gems/sqlite3-1.3.7/lib/sqlite3/database.rb:91:in `prepare'
     /Users/AM/.rvm/gems/ruby-2.0.0-p195/gems/sqlite3-1.3.7/lib/sqlite3/database.rb:134:in `execute'
      csv_parser.rb:60:in `<main>'

Я посмотрел на этот пост, чтобы увидеть, как создается составной ключ:

Что я делаю неправильно?

Спасибо

1 ответ

Решение

Вы не можете поместить ограничение таблицы до конца определений столбцов, как это. Вы должны написать это

db.execute <<__SQL__
CREATE TABLE IF NOT EXISTS AIRED (
  programCode INTEGER,
  fromDate    INTEGER,
  toDate      INTEGER,
  program     TEXT,
  channel     TEXT,
  weekday     TEXT,
  startTime   TEXT,
  endTime     TEXT,
  duration    TEXT,
  PRIMARY KEY (programCode, fromDate, toDate)
)
__SQL__
Другие вопросы по тегам