GirişTEMPORARY TABLE iki şekilde silinebilir
1. DELETE ALL
2. TRUNCATE
DELETE ALL zaten iyi bir seçenek değil.
TRUNCATE için açıklama
şöyle.
TRUNCATE simply creates a new file on disk and does an UPDATE of the pg_class table.
Yani
1. gp_class sitem tablosunun dolmasına sebep oluyor
2. Disk I/O yapılması gerekiyor
Çözüm 1
In Linux, there is one approach that can significantly reduce disk usage of temporary tables. It is to allocate a separate RAM disk for temporary tables.
Bunun için temp_tablespaces seçeneği kullanılıyor
Örnek
mkdir /mnt/dbtemp
chmod 700 /mnt/dbtemp
chown postgres:postgres /mnt/dbtemp
Daha sonra SQL ile şöyle
yaparız. Burada belirtilen dizinin kullanana bir
tablespace yaratılıyor.
/mnt/dbtemp altında örneğin
/mnt/dbtemp/PG_13_202007201/ diye yeni bir dizin yaratılıyor
CREATE TABLESPACE temp LOCATION '/mnt/dbtemp';
Sonra şöyle
yaparız. Böylece örneğin
/mnt/dbtemp/PG_13_202007201/936082 diye yeni bir dizin yaratılıyor
CREATE TEMPORARY TABLE mytemptable (key0 int8) TABLESPACE temp;
/etc/fstab dosyasına şöyle
yaparız. Bir dahaki tekrar başlatmada bu dizin otomatik yüklenir.
tmpfs /mnt/dbtemp/PG_13_202007201/936082 tmpfs \
rw,nodev,nosuid,noatime,nodiratime,size=1G 0 0
Ama bir dahaki başlatmayı beklememek için dizini RAM'e
yüklerizmount /mnt/dbtemp/PG_13_202007201/936082
Sonra postgresql.conf dosyasına şöyle yaparız
temp_tablespaces = 'temp'