Es cierto que es difícil entender lo que sucede debido al manejo extraño (a mi parecer) que hace PHP con las variables. Cuando usas pg_query fuera de la función las variables $conn y $fichero son aquellas que hayas asignado anteriormente. Sin embargo, dentro de una función, $conn y $fichero se refieren a variables locales al procedimiento que no han sido asignadas y por tanto no tienen los valores esperados.
Para remediarlo puedes hacer dos cosas:
1. Pasar $conn y $fichero como parámetros de la función rellenar()
2. Declarar $conn y $fichero como variables globales dentro de la función rellenar():
Código PHP:
function rellenar()
{
global $conn, $fichero;
...
}
Esto le dirá a PHP que son variables externas a la función.
// Saludos