2013-03-20 154 views
0

我正在使用ruby訪問postgresql數據庫並對其進行更新。我試圖更新的其中一個字段叫做「updated_at」,類型是沒有時區的timestamp。我現在用的語句:將時間戳插入postgresql db

db.prepare('statement1', "INSERT INTO games (game_hash,team1,team2,team1score,team2score,time,update_at) VALUES ($1,$2,$3,$4,$5,$6,$7)"); 
update = Time.now.strftime("%Y-%m-%d %H:%M:%S"); 
db.exec_prepared('statement1', [myId, team1, team1score, team2, team2score, progress, update]); 

更新變量的格式是否正確,因爲我最初得到的時間戳字段錯誤的格式不正確,但不再做。但數據庫顯示updated_at字段爲空!所有其他字段都正確填充。任何人都知道是什麼導

更新 - 我添加了一個名爲last_update的datetime類型的新列,並且使用該列代替我的時間戳正確添加到數據庫!我猜是因爲數據庫最初來自rails activerecord,所以update/created_at字段以某種方式受到保護。感謝大家幫忙解決這個問題,我只是用我的新專欄。

+0

你的sql只插入'created_at'字段。我沒有看到'updated_at'。 – 2013-03-20 16:06:09

+0

created_at和的updated_at都是timestamp類型的無時區,我試着插入到每個人,他們都回來了空白(編輯在反正聲明顯示的updated_at問題) – 2013-03-20 16:08:10

+0

難道僅僅是紅寶石或你使用ActiveRecord/Rails的? Activerecord在內部管理created_at和updated_at。 – 2013-03-20 16:13:56

回答

0

簡單的辦法就是要做到這一點:

db.prepare('statement1', "INSERT INTO games (game_hash,team1,team2,team1score,team2score,time,update_at) VALUES ($1,$2,$3,$4,$5,$6, now())"); 
db.exec_prepared('statement1', [myId, team1, team1score, team2, team2score, progress]); 

爲您節省了一行代碼,和的東西,可以去錯了一個顯著數量。

現在,如果這不能解決問題檢查觸發器。如果它確實解決了問題,那麼可能是一個錯字,保留字等。如果它不能解決問題,那麼其他的東西就會混淆插入語句和行存儲之間的數據。