Con la segunda consulta tienes todas las categorias por tanto todos los checkboxes.
Lo que necesitas son los checkboxes seleccionados...
Si los tienes en un array (ejemplo):
Código PHP:
// Necesitas este array - es lo mismo que $seleccionadas = array(12, 20, 33, 41, 43, 49);
$seleccionadas = [12, 20, 33, 41, 43, 49];
// Tu consulta para obtener todos los checkboxes
$categoria = "SELECT * FROM categoria_libro ";
$resultado = pg_query($categoria);
while (false !== ($row = pg_fetch_assoc($resultado))) {
echo '<input type = "checkbox" name = "categoria[]" id = "categoria" value="' . $row['id'] . '"';
// Comprueba si esta categoria estaba seleccionada
if (in_array($row['id'], $seleccionadas)) {
echo ' checked';
}
echo '>';
}
Debería funcionar con esto ...