ti posto il codice delle tabelle coinvolte:
CREATE TABLE spettatore
(
username varchar(10) NOT NULL,
"password" varchar(12),
nome varchar(15),
cognome varchar(20),
e_mail varchar(30),
saldo numeric(3,1) DEFAULT 0,
CONSTRAINT spettatore_pkey PRIMARY KEY (username)
)

CREATE TABLE prenota
(
username varchar(10) NOT NULL,
id_film int4 NOT NULL,
num_posti int4 NOT NULL,
CONSTRAINT prenota_pkey PRIMARY KEY (username, id_film),
CONSTRAINT prenota_id_film_fkey FOREIGN KEY (id_film)
REFERENCES film (id_film) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT prenota_username_fkey FOREIGN KEY (username)
REFERENCES spettatore (username) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT prenota_num_posti_check CHECK (num_posti > 0)
)
CREATE TABLE film
(
id_film serial NOT NULL,
titolo varchar(30),
trama varchar(10000),
produttore varchar(20),
genere varchar(10),
autore varchar(30),
data_produzione date,
distributore varchar(10),
regista varchar(30),
CONSTRAINT film_pkey PRIMARY KEY (id_film)
)

l'unico campo auto incremetato è id film che nella tabella film ha la sua definizione. i dati nella tabella prenota nn possono essere inseriti se nn passano il controllo del trigger quindi per ora è vuota .
il campo che devo confrontare è lo username per ricavare il suo saldo e decrementarlo se questo è maggiore di 0.1.

ho anche provato a modificare il trigger collegato alla tabella che innesca la procedura ma anche quello da errori di sintassi e te lo posto :

CREATE TRIGGER prenotazione BEFORE INSERT ON prenota
when (new.username is not null)
update spettatore
set saldo =saldo-0.2
where new.username = spettatore.username and saldo > '0.1';