Aparte de que, como dice @underdark ST_Length() devuelve una distancia cartesiana entre los dos puntos que en un CS no proyectado no tiene sentido en este caso, yo me quedaría con la respuesta que te da PostGIS. Google Earth utiliza un globo esférico, mientras que el globo WGS84 es un esferoide - es ligeramente aplastado en los polos. En distancias cortas, no habrá mucha diferencia entre los dos, pero a 1500 km, habrá una diferencia más significativa, más aún cuando su línea se desvía de este / oeste.
Además, como el esferoide WGS84 es sólo un modelo idealizado de la Tierra, no te dejes engañar por la precisión del resultado, la exactitud va a ser mucho menor. Si se utiliza el WGS84 para guiar un misil a esa distancia, lo más probable es que dé en la calle de al lado.
Puede obtener el mismo resultado que GE en PostGIS si lo desea, utilizando ST_Distance_Sphere()
esto es útil si utiliza PostGIS como proveedor de datos para GE.
Ejecutando tu ejemplo en mi sistema PostGIS 1.5, obtengo:
SELECT ST_Distance_Sphere(
ST_GeomFromText('POINT(77.83042478941326 9.98463896136159)',4326),
ST_GeomFromText('POINT(78.03469506809812 23.90398909552571)',4326));
st_distance_sphere
--------------------
1547914.78948724
SELECT ST_Distance_Spheroid(
ST_GeomFromText('POINT(77.83042478941326 9.98463896136159)',4326),
ST_GeomFromText('POINT(78.03469506809812 23.90398909552571)',4326),
'SPHEROID["WGS 84",6378137,298.257223563]');
st_distance_spheroid
----------------------
1540651.62674101