|
|
(19 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
− | Siehe auch: | + | Siehe [https://wiki.hsr.ch/Datenbanken/wiki.cgi?PostgreSQLForMySQLUsers HSR-Datenbanken-Wiki]. |
− | * [[PostgreSQL]]
| |
− | | |
− | Licensing:
| |
− | * MySQL: Dual Licensed
| |
− | * PostgreSQL: BSD-Style
| |
− | | |
− | == Internet Resources ==
| |
− | | |
− | * https://wiki.postgresql.org/wiki/Things_to_find_out_about_when_moving_from_MySQL_to_PostgreSQL
| |
− | * https://opslife.org/postgresql-for-mysql-administrators/
| |
− | * http://www.coderholic.com/postgresql-for-mysql-users/
| |
− | * http://stackoverflow.com/questions/772111/switching-from-mysql-to-postgresql-tips-tricks-and-gotchas
| |
− | | |
− | | |
− | == MySQL's INSERT UPDATE ==
| |
− | Option 1) Write a function like:
| |
− | create function doinsert(_id integer, _value text) returns void as $$
| |
− | begin
| |
− | update thetable set value = _value where id = _id;
| |
− | if not found then
| |
− | insert into thetable(id, value) values (_id, _value);
| |
− | end if
| |
− | end;
| |
− | $$ language plpgsql;
| |
− | | |
− | Option 2) Use two SQL statements:
| |
− | -- update the existing
| |
− | update realTable set value = (select value from tmp where tmp.id = realTable.id)
| |
− | where exists (select value from tmp where tmp.id = realTable.id);
| |
− | -- insert the missing
| |
− | insert into realTable(id, value)
| |
− | select id, value from tmp where not exists(select 1 from realTable where tmp.id = realTable.id);
| |
− | | |
− | == MySQL's AUTO INCREMENT ==
| |
− | * Oracle: SEQUENCE
| |
− | * MySQL: id INT UNSIGNED NOT NULL AUTO_INCREMENT
| |
− | * PostgreSQL: id SERIAL und SEQUENCE
| |
− | | |
− | A. SERIAL Gebrauch:
| |
− | CREATE TABLE (
| |
− | Identifier SERIAL;
| |
− | -- ...
| |
− | );
| |
− |
| |
− | B. SEQUENCE:
| |
− | Definition: CREATE SEQUENCE myseq;
| |
− | Gebrauch:
| |
− | CREATE TABLE (
| |
− | Identifier NUMBER DEFAULT nextval('myseq');
| |
− | -- ...
| |
− | );
| |
− | oder:
| |
− | INSERT ... INTO VALUES(nextval('myseq'), 'Name', ...);
| |
− | | |
− | * Siehe auch [http://www.postgresql.org/docs/8.0/static/datatype.html#DATATYPE-SERIAL 1] und [http://www.frankhilliard.com/serialstory.cfm 2]
| |
− | | |
− | == MySQL's DROP TABLE IF EXIST ==
| |
− | * Existiert auch in PostgreSQL ab Version 8.2
| |
− | * Bei früheren Versionen gibt es einen Workaround:
| |
− | ** % select count(*) from pg_class where relname = 'mytable'
| |
− | ** return 1 if mytable exists, and 0 if it doesn't
| |
− | ** so you can run a DROP TABLE command (or not) based on the returned value.
| |
− | | |
− | == MySQL's INT UNSIGNED (Cardinal) ==
| |
− | * MySQL: column INT UNSIGNED
| |
− | * PostgreSQL: column INT CHECK (column > 0)
| |
− | | |
− | == MySQL's Index-Typ ==
| |
− | * MySQL: INDEX idx_id(id)
| |
− | * PostgreSQL: CREATE INDEX idx_id ON TABLENAME(id);
| |
− | | |
− | == MySQL's Query Resultset Limit ==
| |
− | * MySQL: SELECT * FROM tbl LIMIT 10, 5
| |
− | * PostgreSQL: SELECT * FROM tbl LIMIT 5 OFFSET 10
| |
− | | |
− | == Data types of MySQL versus PostgreSQL ==
| |
− | | |
− | {| class="mw-datatable"
| |
− | |-
| |
− | ! Mysql !! !! PostgreSQL !!
| |
− | |-
| |
− | ! Typ !! Beschreibung !! Typ !! Beschreibung
| |
− | |-
| |
− | | tinyint || -128..127 || - || -
| |
− | |-
| |
− | | smallint || -32768..+32767 || int2 || -32767 ... +32768
| |
− | |-
| |
− | | int || -2147483648.. +2147483647 || int4 || -2147483648 ... +2147483647
| |
− | |-
| |
− | | || || int8 || +/- 18 Dezimalstellen
| |
− | |-
| |
− | | float(n) || n E {4;8}, Einf./doppelte Genauig.|| float4 || 6 Dez.Stellen
| |
− | |-
| |
− | | || || float8 || 15 Dezimalstellen
| |
− | |-
| |
− | | date || YYYY-MM-DD Datumsformat || date || Datum, Datumformate mit SET DATESTYLE=Value einstellbar
| |
− | |-
| |
− | | time || HH-MM-SS Zeitformat || time || Uhrzeit, Auflösung 1 Mikrosekunde
| |
− | |-
| |
− | | char(m) || Zeichenkette mit fester Länge || char || ein Zeichen
| |
− | |-
| |
− | | varchar(m) || variable Länge, max. m Zeichen || varchar(n) || 4+n Bytes
| |
− | |-
| |
− | | blob || Binary Large Object, wird für Texte gebraucht, "TINY", "", "LONG" || bytea
| |
− | |-
| |
− | | || || money || 4 Byte, -21474836,48 ... +21474836,47
| |
− | |-
| |
− | | || || text || Variable Länge
| |
− | |-
| |
− | | || || bool || Kann den Wert 't' oder 'f' annehmen
| |
− | |}
| |