Quando stai inviando una riga (PostgreSQL> = 9.5) e vuoi che il possibile INSERT sia esattamente lo stesso del possibile UPDATE, puoi scriverlo come questo :PostgreSQL INSERT ON CONFLICT UPDATE (upsert) usa tutti i valori esclusi
INSERT INTO tablename (id, username, password, level, email)
VALUES (1, 'John', 'qwerty', 5, '[email protected]')
ON CONFLICT (id) DO UPDATE SET
id=EXCLUDED.id, username=EXCLUDED.username,
password=EXCLUDED.password, level=EXCLUDED.level,email=EXCLUDED.email
C'è un modo più breve? Per dire basta: usa tutti i valori EXCLUDE.
In SQLite ho usato per fare:
INSERT OR REPLACE INTO tablename (id, user, password, level, email)
VALUES (1, 'John', 'qwerty', 5, '[email protected]')
Non è una risposta reale, ma è possibile utilizzare un po 'a breve la notazione: 'INSERT INTO nometabella (id, nome utente, password, livello, e-mail) VALORI (1, 'John', 'QWERTY', 5 , '[email protected]') SU CONFLICT (id) DO UPDATE SET (nome utente, password, livello, email) = (EXCLUDED.username, EXCLUDED.password, EXCLUDED.level, EXCLUDED.email) .' Quasi il lo stesso, ma facile da copiare/incollare/gestire l'elenco delle colonne – foal
Un'altra opzione è usare le colonne jsonb e in questo modo non devi preoccuparti delle colonne –