Kilka porad co do zrozumienia tego problemu...
<?php
$a = 'tekst';
?>
Co zwróci ten kod? 'tekst' - bo zmiennej $b przypisaliśmy wartość $a i ta $b została przekazana do echo.
Podobnie jest z warunkami
<?php
$a = 'tekst';
if (($b = $a) === 'tekst') {
}
?>
Zwróci 'działa', bo przypisaliśmy do $b wartość $a i porównaliśmy z ciągiem 'tekst' (=== - jest identyczny)
Twój kod:
<?php
?>
Można zapisać też tak:
<?php
?>
Co każde wykonanie pętli do $line będzie przypisywana wartość funkcji pg_fetch_array(). O ile przypisana wartość $line nie wynosi false (a to zwraca funkcja pg_fetch_array() gdy zabraknie wierszy) pętla się wykona.
Dlaczego mój zapis jest analogiczny do Twojego?
Najpierw, co zwraca porównanie (przez == lub ===)?
<?php
$a = 1;
$b = 2;
?>
Zwracaja true lub false. (przykład zwróci false).
A jak działają warunki w PHP? [i przez to pętle również]
<?php
if (true) {
echo 'warunek z true działa'; }
if (false) {
echo 'warunek z false działa'; }
?>
Warunek z true zadziała, z false nie. Czyli jeżeli umieścisz porównanie w warunku, jego wynik będzie brany pod uwagę - true lub false. W zależności od niego warunek/pętla się wykona.
Ale bez porównania też się da

Ogólnie warunki i pętle zadziałają wtedy, gdy przekażemy do nich cokolwiek innego od 0, false i null (pustki).
Porób sobie testy w stylu:
<?php
if ('asd') {
}
?>
(zadziała)
W Twoim kodzie do pętli przekazujesz wartość funkcji pg_fetch_array() - otrzymuje ona tablicę więc się wykona. Dopiero na końcu dostaje ona false i się przerywa. Umieszczenie porównania (jak w moim kodzie) spowoduje przekazywanie do pętli tylko jego wartości (true albo false) ale w praktyce kod zrobi to samo.

Domyślam się że strasznie nagmatwałem, ale nie umiem inaczej tego opisać

Pisz jakbyś czegoś nie zrozumiał.
Pozdrawiam