PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Szyny 3.1. Heroku PGError:operator nie istnieje:znak zmienny =liczba całkowita

Twój problem jest tutaj:

WHERE "reviews"."trip_id" = 32

a komunikat o błędzie mówi, że:

więc utworzyłeś swój trip_id kolumna w reviews jako ciąg, a nie jako liczbę całkowitą. Będzie to działać dobrze w SQLite, ponieważ system typów SQLite jest raczej luźny, ale nie zadziała w PostgreSQL, ponieważ PostgreSQL jest nieco bardziej rygorystyczny.

Możesz spróbować dodać migrację, aby naprawić typ trip_id :

def change
  change_column :reviews, :trip_id, :integer
end

a jeśli to nie zadziała, upuść i utwórz ponownie tabelę:

def change
  drop_table :reviews
  create_table :reviews do |t|
    #...
    t.integer :trip_id
    #...
  end
end

Możesz również wykonać ALTER TABLE za pomocą surowego SQL, jeśli masz dane, które chcesz zachować i change_column nie działa:

def change
  execute %q{
    alter table reviews
    alter column trip_id
    type int using cast(trip_id as int)
  }
end

To powinno działać w PostgreSQL (ale nie w SQLite), o ile nie masz żadnych uszkodzonych danych w swoim trip_id .

Kiedy już to wyjaśnisz, powinieneś zainstalować PostgreSQL i przełączyć na to środowisko programistyczne. Rozwijanie na bazie SQLite i wdrażanie do PostgreSQL (lub rozwijanie na jednej bazie danych i wdrażanie na dowolnej innej bazie danych) jest złym pomysłem i spowoduje różnego rodzaju smutek i zamieszanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie Postgres jest bardzo wolne z current_date::date zamiast zakodowanej na stałe daty

  2. Jak sprawdzić, gdzie używana jest funkcja?

  3. Jak KOPIOWAĆ IMPORTOWAĆ plik json do postgresa?

  4. Czy INSERT [...] ON CONFLICT można użyć do naruszeń kluczy obcych?

  5. PostgreSQL:pokaż podróże w obrębie ramki ograniczającej