Utilisez NULLIF
dans votre instruction INSERT :
INSERT INTO your_table (cols..., some_date) VALUES (..., NULLIF(your_input_field, ''))
Si vous souhaitez insérer NULL si la valeur en question est l'une d'un certain nombre de valeurs, il peut être plus simple d'utiliser une instruction CASE :
INSERT INTO your_table (cols..., some_date)
VALUES (..., CASE WHEN your_input_field IN ('', '#', '-', '--', '??') THEN NULL ELSE your_input_field END)
Pourrait faire la même chose avec un tableau, si c'est plus simple :
INSERT INTO your_table (cols..., some_date)
VALUES (..., CASE WHEN your_input_field = ANY('{"",#,-,--,??}'::TEXT[]) THEN NULL ELSE your_input_field END)