PostgreSQL'de böyle bir mekanizma yoktur.
Bununla birlikte, böyle bir tablo değişikliğinin aşırı etkilerinden yine de kaçınabilirsiniz.
Aşağıdaki ifade , ifade / işlem süresince tabloda özel erişim kilidi alır:
ALTER TABLE your_table
ADD COLUMN new_column integer NOT NULL DEFAULT 0;
Bu ifade kataloğu değiştirir, ardından yeni sütunun tüm satırlarda varsayılan değeri içermesi için tüm tabloyu yeniden yazar. Tablonun çok sayıda satırı varsa ve yeterince sık erişilirse, bu bazı geçici sorunlara neden olur.
Bundan kaçınmak için özel kilidi mümkün olduğunca kısa tutmaya çalışın:
ALTER TABLE your_table
ADD COLUMN new_column integer;
ALTER TABLE your_table
ALTER COLUMN new_column SET DEFAULT 0;
Bu temelde katalogda sadece (aslında iki) bir değişiklik olduğundan (veri değişikliği olmaz), oldukça hızlı bir şekilde tamamlanacaktır. Ardından ihtiyaçlarınıza ve tablo kullanımına bağlı olarak, yeni sütunu bir adımda veya toplu olarak varsayılan olarak güncelleyebilir ve bittiğinde sütunu olarak ayarlayabilirsiniz NOT NULL
.
Gerçekleşen bir istek hakkında güncelleme: PostgreSQL 11 bu özelliğe sahip olacak. Daha fazla bilgi için bkz. Https://www.depesz.com/2018/04/04/waiting-for-postgresql-11-fast-alter-table-add-column-with-a-non-null-default/ .