12

Büyük bir veri kümesine sahip bir tablom var ve bu tablonun, bırakmak istediğim üç sütunu var.
Soru: Postgres bununla nasıl başa çıkacak?Büyük bir veri kümesinde Postgres'te sütun bırakılıyor

Her girişten geçecek mi yoksa eşleme bilgisini fazla yük olmadan güncelleyecek mi? Sadece bir ALTER TABLE yapabilir miyim veya bu özel durumda takas tablosunu kullanmalı mıyım?

Ve eğer herhangi bir fark yaratırsa, üç sütunun tümü sabit uzunluğa (iki tam sayı ve bir sayısal) sahiptir. Zaten istendi eğer

Üzgünüm ancak Google

cevap

20

, ALTER TABLE DROP COLUMN sadece sadece sistem tablolarında sütunları devre dışı gelmez ... herhangi ilgili sorular/makale bulamadık. Çok hızlı, ancak yığın dosyalarındaki verileri kaldırmıyor. Atanan dosya alanını sıkıştırmak için daha sonra VACUUM FULL yapmalısınız. Yani ALTER TABLE DROP COLUMN çok hızlı. Ve dosyaları sıkıştırırsınız, daha yavaş (özel LOCK ile) VACUUM FULL ile çağırmalısınız.

16

Google, bu soru için yararsız olabilir ama the manual rarely fails:

DROP COLUMN sütunu fiziksel kaldırmaz, ancak sadece SQL operasyonlarına görünmez hale getirir. Sonraki ekleme ve tablodaki güncelleştirme işlemleri, sütun için boş değer depolar. Bu nedenle, bir sütun bırakma hızlıdır ancak düşürülmüş sütun tarafından işgal edilen alanın geri alınmadığı için tablonuzun disk boyutunu hemen azaltmaz. Alan, varolan satırların güncellenmesiyle zamanla geri alınacaktır.

Ve:

tablonun hemen bir yeniden yazma zorlamak için, tam vakum, CLUSTER veya yeniden yazmak zorlar ALTER TABLE şekillerinden birini kullanabilirsiniz. Bu , tabloda anlamsal olarak görülemeyen bir değişiklikle sonuçlanır, ancak artık yararlı olmayan verilerden kurtulur.

Özellikle sistem, katalog tablosunda pg_attribute sütun attisdroppedTRUE ayarlanır.

+2

İlginç bir şekilde, satır güncelleştirmeleri artık bırakılan sütunlarda NULL'ları "depolayacak" olduğundan. Ve postgresql, isteğe bağlı "boş bitmap" içinde bir bit belirleyerek boş değerlerini sakladığından, _every_ satırında, görünür satırlardan hiçbiri olmasa bile, artık boş bir bitmap (her sekiz bırakılmış veya bırakılmamış sütun için bir byte'lık boyut) olmalıdır. BOŞ –

İlgili konular