2016-03-19 19 views
0

Standart ERROR mesajını ve PostgreSQL kodunu kullanmak istiyorum.
Şuan hedefe ulaşabilirim, ancak kullanabileceğim en iyi yolu bilmek isterim.
Veritabanımda şu anki işlevim var.
PostgreSQL Standart HATA KODU ve HATA MESAJI Nasıl Kullanılır

CREATE OR REPLACE FUNCTION Dugong.Forget_Passwd_Add(
     in_Username varchar(255), 
     in_randomURLs text 
) 
RETURNS void AS $$ 
BEGIN 
     IF (SELECT Dugong.Users_isExist(in_Username)) THEN 
     INSERT INTO dugong.Forget_Passwd (Username, randomURLs, used) 
     VALUES (in_Username, in_randomURLs, FALSE); 
     ELSE 
       RAISE EXCEPTION USING ERRCODE = '20000', MESSAGE = 'Username not found'; 
     END IF; 
END; 
$$ LANGUAGE PLPGSQL; 

My Node Express ile pg modül client.query() kullanacaktır.
client.query(), geri arama err ve result içerir.
Örnekle burada. Sırasıyla hata iletisini ve hata kodunu almak için err.message ve err.code'u kullanabilirim.
Soru:
Kodumu RAISE veritabanı kenarındaki herhangi bir hatanın yalnızca belirli bir hata kodumu kısıtlamamasını istiyorum.
Bunu nasıl yapabilirim?

+1

Aynı soru: http://stackoverflow.com/questions/2699958/postgresql-custom-exceptions –

cevap

1

Özel ve standart özel durumlar eklemek için raise kullanabilirsiniz.

Referans standart istisnalar ya da kod tarafından:

raise sqlstate '22012'; 

veya adıyla

: Burada

raise division_by_zero; 

list of defined error codes and names olduğu; raise hakkında daha fazla bilgi: "Errors and messages".

+0

Farz edelim. Kodumun "kullanıcı adı bulunamadı" nın ötesinde bir "hata" oluşturabileceğini istiyorum. Örneğin, "disk dolu" hatası ve şu anda hayal edemediğim herhangi bir hata. Dava için dava kodunu girmem gerekiyor mu? – Sarit

+0

Ya sabit kod veya hata kodları ve mesajlar için kendi eşlemenizi koruyun (sadece http://stackoverflow.com/questions/2699958/postgresql-custom-exceptions önerir). –

+0

Teşekkür ederim. Cevabınızı tam olarak anlayamasam da yine de çalışmamla tekrar döneceğim. – Sarit