PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dlaczego podczas sprawdzania typu wiersza jest NOT NULL false?

Jak podał @Pavel, czek <row-type> IS NOT NULL nie działa tak, jak się wydaje. Zwraca TRUE jeśli (i tylko jeśli) każda kolumna jest NOT NULL .

Przetestuj specjalną zmienną FOUND zamiast tego (jak skomentował @Mike):

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;

Lub możesz odwrócić swoją ekspresję w teście.

IF rowt IS NULL THEN
   -- do nothing
ELSE 
   RAISE EXCEPTION 'email address, %, already registered.' , eml;
END IF;

Każdy istniejący wiersz, który można znaleźć, zawiera co najmniej jedną kolumnę, która jest NOT NULL , dlatego rowt IS NULL zwraca tylko TRUE jeśli nic nie zostanie znalezione.

Powiązane odpowiedzi z większą ilością szczegółów:

  • Test NIE JEST NULL dla rekordu nie zwraca TRUE, gdy zmienna jest ustawiona
  • Ograniczenie NOT NULL na zbiorze kolumn


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Deklaratywny SQLAlchemy:definiowanie wyzwalaczy i indeksów (Postgres 9)

  2. Jak zadeklarować zmienne lokalne w postgresql?

  3. Python psycopg2 nie wstawia się do tabeli postgresql

  4. Przekaż wiele wartości w jednym parametrze

  5. psql:FATAL:Uwierzytelnianie identyfikatora nie powiodło się dla użytkownika postgres