2009-07-22 15 views
5

Yeni satırlar eklenmesi gereken uzun bir çalışma işlevim var. Bu işlevin ilerlemesini nasıl kontrol edebilirim? Kirli düşünüyordumPostgres'te Kirli Okumalar

yüzden çalışacak okur ben http://www.postgresql.org/docs/8.4/interactive/sql-set-transaction.html okuyup aşağıdaki kodla geldi ve yeni bir oturumda koştum:


SET SESSION CHARACTERISTICS AS SERIALIZABLE; 

SELECT * FROM MyTable; 

Postgres bana bir sözdizimi hatası verir. Neyi yanlış yapıyorum? Bunu doğru yaparsam, o uzun işlev hala çalışıyorken eklenen kayıtları görecek miyim?

Teşekkür

cevap

10

PostgreSQL Eğer fonksiyonu dışından aka READ UNCOMMITTED yalıtım düzeyini görmek için bir yol uygulamaz. Sizin temel iki seçenek vardır:

  • ne kadar ileri geri aynı veritabanına işlevinden dblink gibi
  • Kullanım şey vardır boyunca size göstermek ve bir karşı tablosunu güncelleştirmek için her şimdi ve sonra fonksiyon kullanımını RAISE NOTICE Var Buradan. Bu tamamen ayrı bir işlem olduğu için, sayaç, bu işlem taahhüt ettiği anda görünür olacaktır - ana işlemin (işlev çağrısı etrafında) bitmesini beklemek zorunda değilsiniz.
6

PostgreSQL ise PostgreSQL Transaction Isolation

, dört standart işlem yalıtım düzeylerinden birini isteyebilir. Ancak, dahili olarak, Okuyan ve Seri hale getirilebilir seviyelere karşılık gelen sadece iki ayrı yalıtım seviyesi vardır. Okunan Okuma seviyesini seçtiğinizde, Okunan Okuma'yı gerçekten alırsınız ve Tekrarlanabilir Okuma'yı seçtiğinizde, gerçekten Seri hale getirilebilirsiniz, böylece gerçek yalıtım seviyesi seçtiğinizden daha sıkı olabilir. Bu, SQL standardı tarafından izin verilir: Dört izolasyon seviyesi sadece hangi fenomenin gerçekleşmemesi gerektiğini tanımlar, hangi fenomenin gerçekleşmesi gerektiğini tanımlamazlar.

İlgili konular