Robert Haas points the finger:
If an error message shows up in the PostgreSQL log, what program is malfunctioning? It’s easy to conclude that the answer is PostgreSQL, but that’s too simplistic.
For example, suppose these messages show up in my log file:
ERROR: new row for relation “orders” violates check constraint “orders_d_check”
DETAIL: Failing row contains (1975-03-16, 42).
STATEMENT: insert into orders values (‘1975-03-16’, 42);
Error logs are always a “reading is fundamental” scenario and an exercise in applied logic. Sometimes the exercise is harder than others, such as the notorious “String or binary data would be truncated” in SQL Server or “Object reference not set to an instance of an object” in .NET. But in many cases, there’s enough information at least to get an idea of culprit and cause.