Anonim bir plpgsql kod bloğu içinde döngüler kullanılarak bölümlenecek tabloların bir dizi büyük sayıda çok sayıda dosya alıyorum $do$
.
$do$
BEGIN
FOR yyyy in 2012..2016 THEN
EXECUTE $$COPY table$$||yyyy||$$ FROM 'E:\data\file$$||yyyy||$$.csv DELIMITER ',' CSV;$$;
END LOOP;
END;
$do$ LANGUAGE plpgsql
Tüm bu işlem yaklaşık 15 saat sürmelidir ve bir noktada bir ithalat hatası varsa, tüm içe aktarma işlemlerinin geri alınmamasını umuyorum.
IIRC COMMIT
saklanan fonksiyonlar içinde çalışmaz, çünkü tüm fonksiyon tek bir işlem olarak değerlendirilir.
İçin olan belgelerden$do$
Kod bloğu, parametresiz bir fonksiyonun gövdesiymiş gibi işlenir ve boşluk döner. Bir kez ayrıştırılır ve yürütülür.
Bunun tüm $do$
işlemin tek bir işlem olduğu ve blok içindeki taahhütlerin işe yaramayacağı anlamına geldiğini varsayıyorum . Doğrumuyum?
BEGIN
VeyaCOMMIT
işlev gövdesinde deneyin . Bir istisna alacaksınız, çünkü buna izin verilmiyor (mümkün değil).