AUTO_INCREMENT ersetzen
CREATE TABLE benutzer ( id SERIAL PRIMARY KEY, benutzername VARCHAR, ... );
Unsigned Integer
CREATE TABLE check_demo1 ( id INTEGER NOT NULL CHECK (id >= 0) );
Spalten überprüfen
CREATE TABLE check_demo2 ( spalte1 VARCHAR, spalte2 VARCHAR, CHECK (spalte1 IS NOT NULL OR spalte2 IS NOT NULL) );
Funktionen zur Prüfung einsetzen
CREATE TABLE check_demo3 ( ... passwort CHAR(32) NOT NULL CHECK (LENGTH(passwort) = 32) ... );
Vorgabewerte setzen
CREATE TABLE default_demo1 ( ... webseite_anzeigen BOOLEAN NOT NULL DEFAULT FALSE, ... );
ZEROFILL ersetzen
SELECT lpad(354::text, 6, '0');
GROUP BY-Beispiel
CREATE TABLE groupby_test ( id INTEGER PRIMARY KEY, daten VARCHAR(10) NOT NULL ); INSERT INTO groupby_test (id, daten) VALUES (1, 'a'); INSERT INTO groupby_test (id, daten) VALUES (2, 'b'); INSERT INTO groupby_test (id, daten) VALUES (3, 'c'); INSERT INTO groupby_test (id, daten) VALUES (4, 'a'); INSERT INTO groupby_test (id, daten) VALUES (5, 'b');
GROUP BY-Beispiel
mysql> SELECT id, daten FROM groupby_test GROUP BY daten;
Aggregatfunktion nutzen
SELECT id, daten FROM groupby_test GROUP BY daten;
SELECT id, daten FROM groupby_test GROUP BY daten, id;
SELECT MAX(id), daten FROM groupby_test GROUP BY daten;
Unterschiedliche Sortierreihenfolgen
CREATE TABLE null_test ( id INTEGER PRIMARY KEY, daten VARCHAR(10) ); INSERT INTO null_test (id, daten) VALUES (1, 'a'); INSERT INTO null_test (id, daten) VALUES (2, NULL); INSERT INTO null_test (id, daten) VALUES (3, 'b'); INSERT INTO null_test (id, daten) VALUES (4, NULL); INSERT INTO null_test (id, daten) VALUES (5, 'c');
MySQL: Unterschiedliche Sortierreihenfolgen
mysql> SELECT id, daten FROM null_test ORDER BY daten;
PostgreSQL: Unterschiedliche Sortierreihenfolgen
SELECT id, daten FROM null_test ORDER BY daten;
Sortierreihenfolge in PostgreSQL
SELECT id, daten FROM null_test ORDER BY daten NULLS FIRST;
IFNULL() und COALESCE()
mysql> SELECT IFNULL(NULL, 10);
mysql> SELECT COALESCE(NULL, 10, 20);
Unterschiedliche Bezeichner
SELECT 1 AS GROSS;
SELECT 1 AS GeMiScHt;
Originalen Bezeichner erhalten
SELECT 1 AS "GeMiScHt";
LIKE und ILIKE
SELECT 'ABC' LIKE 'abc';
SELECT 'ABC' ILIKE 'abc';
INSERT IGNORE emulieren
CREATE TABLE merge_test (id INT PRIMARY KEY, inhalt TEXT);
CREATE FUNCTION merge_tabelle(schluessel INT, daten TEXT) RETURNS VOID AS $$ BEGIN LOOP -- zuerst wird ein Update versucht UPDATE merge_test SET inhalt = daten WHERE id = schluessel; IF found THEN -- Update erfolgreich RETURN; END IF; -- nichts gefunden, Daten mittels INSERT einfügen BEGIN INSERT INTO merge_test (id, inhalt) VALUES (schluessel, daten); -- Einfügen erfolgreich RETURN; EXCEPTION WHEN unique_violation THEN -- Fehler, erneut versuchen END; END LOOP; END; $$ LANGUAGE plpgsql;
SELECT merge_tabelle(23, 'wichtige Daten');
Datenbank konvertieren
perl mysql2pgsql.perl mysql-dump.sql pg-dump.sql