आपकी समस्या यहाँ है:
WHERE "reviews"."trip_id" = 32
और त्रुटि संदेश कहता है कि:
इसलिए आपने अपना trip_id
बना लिया है reviews
में कॉलम एक पूर्णांक के बजाय एक स्ट्रिंग के रूप में। यह SQLite में ठीक काम करेगा क्योंकि SQLite का टाइप सिस्टम ढीला है लेकिन यह PostgreSQL में काम नहीं करेगा क्योंकि PostgreSQL काफी सख्त है।
trip_id
. के प्रकार को ठीक करने के लिए आप माइग्रेशन जोड़ने का प्रयास कर सकते हैं :
def change
change_column :reviews, :trip_id, :integer
end
और अगर वह काम नहीं करता है तो तालिका को छोड़ दें और फिर से बनाएं:
def change
drop_table :reviews
create_table :reviews do |t|
#...
t.integer :trip_id
#...
end
end
यदि आपके पास वह डेटा है जिसे आप संरक्षित करना चाहते हैं और change_column
, तो आप अपरिष्कृत SQL के माध्यम से एक ALTER TABLE भी कर सकते हैं काम नहीं करता:
def change
execute %q{
alter table reviews
alter column trip_id
type int using cast(trip_id as int)
}
end
यह तब तक PostgreSQL (लेकिन SQLite नहीं) में काम करना चाहिए जब तक कि आपके trip_id
में कोई टूटा हुआ डेटा न हो ।
एक बार जब आप इसे सुलझा लेते हैं, तो आपको PostgreSQL स्थापित करना चाहिए और अपने विकास के माहौल को उस पर स्विच करना चाहिए। SQLite के शीर्ष पर विकास करना और PostgreSQL पर परिनियोजित करना (या एक डेटाबेस के शीर्ष पर विकसित करना और उस मामले के लिए किसी अन्य डेटाबेस के शीर्ष पर परिनियोजित करना) एक बुरा विचार है और यह आपको सभी प्रकार के दुःख और भ्रम का कारण बनेगा।