Is there some way to store EITHER a specific day (date) OR a year in the same column?
I would model this thusly:
CREATE TABLE ... (
   birthday date NOT NULL,
   only_year boolean DEFAULT FALSE NOT NULL,
   ...
);

The second column indicates if only the year of the data is relevant or not.