Som @Pavel angav, är kryssrutan <row-type> IS NOT NULL
fungerar inte som du verkar förvänta dig. Den returnerar TRUE
om (och bara om) varje kolumn är NOT NULL
.
Testa specialvariabeln FOUND
istället (som @Mike kommenterade):
CREATE OR REPLACE FUNCTION registration(wr text)
RETURNS integer AS
$rL$
...
SELECT * INTO rowt FROM email WHERE email_email = eml;
IF FOUND THEN
RAISE EXCEPTION 'email address, %, already registered.', eml;
END IF;
...
$rL$ LANGUAGE plpgsql;
Eller du kan invertera ditt uttryck i testet.
IF rowt IS NULL THEN
-- do nothing
ELSE
RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;
Alla befintliga rader du hittar innehåller minst en kolumn som är NOT NULL
, därför ÄR rowt IS NULL
returnerar endast TRUE
om inget hittas.
Relaterade svar med mer information:
- IS NOT NULL-testet för en post returnerar inte TRUE när variabeln är inställd
- INTE NULL-begränsning över en uppsättning kolumner