[postgresql-it] Re: Problema modifica tipo campo

  • From: Daniele Varrazzo <daniele.varrazzo@xxxxxxxxx>
  • To: postgresql-it@xxxxxxxxxxxxx
  • Date: Mon, 13 Sep 2021 12:03:30 +0200

On Mon, 13 Sept 2021 at 11:53, Roberto Tagliaferri - Tosnet srl <
r.tagliaferri@xxxxxxxxx> wrote:

Buondì a tutti, ho una serie di db con dei campi che devo modificare da
int a bigint.
per le tabelle più picco9le nessun problema, per quella più grande (poco
più di 8 milioni di record) la procedura non va a buon fine e anzi blocca
il db:
Nei log trovo una lista di
2021-09-11 16:43:49 CEST ::1FATAL:  remaining connection slots are
reserved for non-replication superuser connections

Se non puoi interrompere le connessioni per il periodo (minuti) in cui
viene effettuato l'alter table, puoi procedere gradualmente: aggiungi un
nuovo campo, aggiungi un trigger per popolare i nuovi record su insert, fai
un update dei dati vecchi a paginate, poi in una transazione puoi droppare
il vecchio e rinominare il nuovo, che è un'operazione immediata (purché non
ci siano accessi concorrenti). Usando ALTER TABLE ... ADD CONSTRAINT ...
USING INDEX puoi anche far diventare il nuovo campo la pkey della tabella.


la situazione si risolve con un semplice reload (via systemctl)

il server è un linux centos 7.9.2009, postgres (come da distribuzione) è
la versione 9.2.24

...che è ben oltre la data di scadenza e potrebbe non avere CREATE INDEX
CONCURRENTLY o USING INDEX.

-- Daniele

Other related posts: