Violação de chave estrangeira alguém ajuda?

Segue meu código, quando vou tentar salvar no banco ele ta erro de violação tenho duas tabelas uma de ‘Consulta’ e outra de pacientes na de consulta quero que puxe o nome do paciente da tabela paciente então coloque o id da tabela de pacientes como chave estrangeira na tabela consulta:

public void Salvar(BeansConsulta pac) {
    conex.getConnection();
    try {
        PreparedStatement pst = conex.con.prepareStatement("insert into consulta (diagnostico_consulta, receita_consulta, paciente_nome, id_agenda_cod, id_consulta)values (?,?,?,?,?)");
        pst.setString(1, cons.getDiagnostico());
        pst.setString(2, cons.getReceitaConsulta());
        pst.setString(3, cons.getNomePaciente());
        pst.setInt(4, cons.getIdagendaCod());
        pst.setInt(5, cons.getIdConsulta());
        pst.execute();
        JOptionPane.showMessageDialog(null, "Consulta salva com sucesso !");

    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao salvar consulta no banco" + ex);
    }
    conex.desconecta();

}

}

CREATE TABLE consulta
(
id_consulta serial NOT NULL,
id_agenda_cod integer,
diagnostico_consulta character varying(1000),
receita_consulta character varying(1000),
id_paciente_cod integer,
paciente_nome character varying(50),
CONSTRAINT consulta_pkey PRIMARY KEY (id_consulta),
CONSTRAINT consulta_id_agenda_cod_fkey FOREIGN KEY (id_agenda_cod)
REFERENCES agenda (agenda_cod) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT consulta_id_paciente_cod_fkey FOREIGN KEY (id_paciente_cod)
REFERENCES pacientes (pac_codigo) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION

Se a tabela Consulta tem chaves estrangeiras, então as tabelas que definem a referência às chaves listadas, devem previamente existir no banco, ou seja, devem ter sido salvas primeiro, o registro relativo à chave. Por exemplo, supondo a consulta de ID 45 que faça a referência à fk 29 da tabela Paciente. Logo, o registro de ID 29 deve existir na tabela Paciente previamente para se salvar a consulta 45. Caso esse registro não exista, haverá uma violação de fk, ou seja, se está referenciando uma tabela ou registro inexistente no banco de dados.
Um outro fato é qua na tabela, a chave estrangeira é declarada como:

id_paciente_cod integer,

Isto é, é do tipo inteiro, mas na lista de campos da inserção, tu informa:

No entanto, na preparação da declaração, vê-se que o tipo do campo é String (VARCHAR). Então tens que ajustar essas informações para que coincidam.