sql >> Databasteknik >  >> RDS >> Mysql

byta från MySQL till PostgreSQL för Ruby on Rails för Herokus skull

Vanliga problem:

  1. GRUPPA EFTER beteende. PostgreSQL har en ganska strikt GROUP BY. Om du använder en GROUP BY-sats måste varje kolumn i din SELECT antingen visas i din GROUP BY eller användas i en aggregerad funktion.
  2. Data trunkering. MySQL kommer tyst att trunkera en lång sträng för att passa in i en char(n) Om inte din server är i strikt läge, kommer PostgreSQL att klaga och få dig att trunkera din sträng själv.
  3. Citering är annorlunda, MySQL använder backticks för att citera identifierare medan PostgreSQL använder dubbla citattecken.
  4. LIKE är skiftlägesokänslig i MySQL men inte i PostgreSQL. Detta leder till att många MySQL-användare använder LIKE som en skiftlägesokänslig stränglikhetsoperator.

(1) kommer att vara ett problem om du använder AR:s group metod i någon av dina frågor eller GROUP BY i valfri rå SQL. Sök efter column "X" must appear in the GROUP BY clause or be used in an aggregate function och du kommer att se några exempel och vanliga lösningar.

(2) kommer att vara ett problem om du använder strängkolumner var som helst i din applikation och dina modeller inte korrekt validerar längden på alla inkommande strängvärden. Observera att att skapa en strängkolumn i Rails utan att ange en gräns faktiskt skapar en varchar(255) kolumn så att det faktiskt finns en implicit :limit => 255 även om du inte angav någon. Ett alternativ är att använda t.text för dina strängar istället för t.string; detta låter dig arbeta med godtyckligt stora strängar utan straff (åtminstone för PostgreSQL). Som Erwin noterar nedan (och alla andra chanser han får), varchar(n) är lite av en anakronism i PostgreSQL-världen.

(3) borde inte vara ett problem om du inte har rå SQL i din kod.

(4) kommer att vara ett problem om du använder LIKE var som helst i din applikation. Du kan fixa detta genom att ändra a like b till lower(a) like lower(b) (eller upper(a) like upper(b) om du gillar att skrika) eller a ilike b men tänk på att PostgreSQL:s ILIKE är icke-standard.

Det finns andra skillnader som kan orsaka problem men de verkar vara de vanligaste problemen.

Du måste granska några saker för att känna dig säker:

  • group samtal.
  • Raw SQL (inklusive alla utdrag i where samtal).
  • Verifieringar av stränglängd i dina modeller.
  • All användning av LIKE.


  1. Två Laravel-applikationer på samma server i konflikt med varandra

  2. PL/SQL Online MCQ Quiz

  3. SQL Server-autentisering vs. Windows-autentisering:Vilken ska användas och när

  4. Oracle DB Server + APEX + ORDS + JasperRapporter från början (Del 1)