Αλλάζω από τη MySQL στην PostgreSQL και αναρωτιόμουν πώς μπορώ να κάνω αυτόματη αύξηση τιμών. Είδα στα έγγραφα της PostgreSQL έναν τύπο δεδομένων "serial", αλλά λαμβάνω συντακτικά σφάλματα όταν τον χρησιμοποιώ (στην v8.0).
Ναι, η SERIAL είναι η αντίστοιχη λειτουργία.
CREATE TABLE foo (
id SERIAL,
bar varchar);
INSERT INTO foo (bar) values ('blah');
INSERT INTO foo (bar) values ('blah');
SELECT * FROM foo;
1,blah
2,blah
Η SERIAL είναι απλά μια μακροεντολή δημιουργίας χρόνου πίνακα γύρω από ακολουθίες. Δεν μπορείτε να τροποποιήσετε το SERIAL σε μια υπάρχουσα στήλη.
Μπορείτε να χρησιμοποιήσετε οποιονδήποτε άλλο ακέραιο τύπο δεδομένων, όπως smallint
.
Παράδειγμα :
CREATE SEQUENCE user_id_seq;
CREATE TABLE user (
user_id smallint NOT NULL DEFAULT nextval('user_id_seq')
);
ALTER SEQUENCE user_id_seq OWNED BY user.user_id;
Καλύτερα να χρησιμοποιείτε τον δικό σας τύπο δεδομένων, παρά τον σειριακό τύπο δεδομένων χρήστη.
Στο πλαίσιο της ερώτησης που τέθηκε και σε απάντηση στο σχόλιο του @sereja1c, η δημιουργία SERIAL
δημιουργεί σιωπηρά ακολουθίες, οπότε για το παραπάνω παράδειγμα-
CREATE TABLE foo (id SERIAL,bar varchar);
CREATE TABLE
θα δημιουργούσε σιωπηρά την ακολουθία foo_id_seq
για τη σειριακή στήλη foo.id
. Ως εκ τούτου, το SERIAL
[4 Bytes] είναι καλό για την ευκολία χρήσης του, εκτός αν χρειάζεστε έναν συγκεκριμένο τύπο δεδομένων για το id σας.