Vanliga problem:
- 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.
- 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. - Citering är annorlunda, MySQL använder backticks för att citera identifierare medan PostgreSQL använder dubbla citattecken.
- 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.