Ошибка при установке составного первичного ключа в 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__