Lista rzeczy, które zrobiłbym inaczej:
MEDIUMINT w MySQL to dziwna kaczka (3 bajty). Unikałbym tego, ale w przeciwnym razie zmapuj go również na INTEGER.
MySQL BOOLEAN (alias BOOL, alias TINYINT(1) ) nie jest zgodny z typem logicznym pg. Możesz lub nie możesz przenosić aplikacji w zależności od tego, czego używają jako literałów logicznych. W MySQL, TRUE i FALSE odwzorowują wartości liczb całkowitych 1 i 0. Wygląda na to, że typ pg BOOLEAN używa notacji z literałami łańcuchowymi. Tak więc aplikacje mogą, ale nie muszą być przenośne – przynajmniej nie jest to wymiana kropli.
Wreszcie, ostatnia linia w Twojej tabeli powinna brzmieć:
INTEGER PRIMARY KEY AUTOINCREMENT
Jest to mniej więcej odpowiednik
BIGINT PRIMARY KEY AUTO_INCREMENT
w MySQL. W postgresie typ danych SERIAL daje w wyniku kolumnę INTEGER i będzie to mniej więcej takie samo jak w przypadku MySQL
INTEGER PRIMARY KEY AUTO_INCREMENT
Postgres ma również typ BIGSERIAL, który jest taki sam jak SERIAL, ale ma typ BIGINT zamiast typu INT.
Co przegapiłem:
Brakuje INTEGER (alias INT) dla MySQL. Jest porównywalna do INTEGER w pg.Bardzo ważne pominięcia:VARCHAR i CHAR. Semantycznie VARCHAR w MySQL i PG oraz CHAR w MySQL i PG są takie same, ale w MySQL te typy mają znacznie krótszą maksymalną długość. W MySQL te typy mogą mieć maksymalnie nieco mniej niż 64 kb, w pg 1 Gb (bajty). Rzeczywisty specyfikator długości jest wyrażony w liczbie znaków, więc jeśli masz zestaw znaków wielobajtowych, musisz podzielić maksymalną długość przez maksymalną liczbę znaków, aby uzyskać teoretyczną maksymalną długość określoną dla tego zestawu znaków. W SQLite VARCHAR i CHAR mapują oba na TEXT
Typy danych BIT w MySQL i PG mają mniej więcej taką samą semantykę, ale w MySQL maksymalna długość typu danych BIT wynosi 64 (bity)
Myślę, że typ danych MySQL VARBINARY jest najlepiej porównywalny z typem danych BYTEA PG. (ale rzeczywiście typy BLOB MySQL również są do tego mapowane)
Typ FLOAT w MySQL powinien być równoważny REAL w postgresie (i REAL również w SQLite) Typ DECIMAL w MySQL jest równoważny DECIMAL w postgresie, z wyjątkiem tego, że w postgresie typ nie nakłada arbitralnego limitu precyzji, podczas gdy w MySQL maksymalna precyzja to (jak sądzę) 70. (czyli 70 pozycji liczbowych) Zarówno dla MySQL, jak i Postgres, NUMERIC jest aliasem typu DECIMAL.