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

