Identificadores (incluindo nomes de coluna) que não aspas duplas são dobradas para minúsculas no PostgreSQL. Nomes de coluna que foram criados com aspas duplas e, portanto, letras maiúsculas retidas (e/ou outras violações de sintaxe) devem ser aspas duplas pelo resto de sua vida:
"first_Name"
Valores (literais de string / constantes) são colocados entre aspas simples :
'xyz'
Então, sim , os nomes das colunas do PostgreSQL diferenciam maiúsculas de minúsculas (quando entre aspas duplas):
SELECT * FROM persons WHERE "first_Name" = 'xyz';
Leia o manual sobre identificadores aqui.
Meu conselho permanente é usar nomes legais e minúsculos exclusivamente para que aspas duplas não sejam necessárias.