Re: psql --html and to_char() - Mailing list pgsql-general

From Ron Johnson
Subject Re: psql --html and to_char()
Date
Msg-id CANzqJaAMDU6eRWOjetDQ_BK9uvGau=2q20mbv_jQqZR4Gd2Ccg@mail.gmail.com
Whole thread Raw
In response to Re: psql --html and to_char()  (Greg Sabino Mullane <htamfids@gmail.com>)
List pgsql-general


On Wed, Aug 27, 2025 at 6:13 PM Greg Sabino Mullane <htamfids@gmail.com> wrote:
On Wed, Aug 27, 2025 at 11:28 AM Ron Johnson <ronljohnsonjr@gmail.com> wrote:
Is there a way around this, other than writing my own HTMLifier?

Not unless your to_char() output can be coerced back into a numeric. (for the archives sake, see fe_utils/print.c for the complete list of right-aligned columns: int family, float, numeric, oid, xid, cid, and the when-will-it-finally-die money type)

Easier to write a generic shell function.

HTMLify_csv()
{
    local -rn pFormats="$1"
    local line
    local -a lFields
    printf '<table border=1><font size="2">\n'
    read -r line
    IFS='|' read -r -a lFields <<< "${line}"
    local -i lFldCnt=${#lFields[@]}
    printf '<tr>'
    for ((i=0; i<$lFldCnt; i++)); do printf '<th align="%s">%s</th>' center "${lFields[i]}"; done
    printf "</tr>\n"
    while IFS= read -r line
    do
        [[ $line =~ rows?\)$ ]] && { printf '<tr><td>%s</td></tr>\n' "$line"; continue; }
        IFS='|' read -r -a lFields <<< "${line}"
        printf '<tr>'
        for ((i=0; i<$lFldCnt; i++))
        do
            printf '<td align="%s">%s</td>' "${pFormats[i]}" "${lFields[i]}"
        done
        printf "</tr>\n"
    done
    printf '</table>\n'
}

declare -a Formats=(right left)
psql -XAc "select to_char(oid::integer, '99,999') as oid, datname from pg_database;" | HTMLify_csv Formats

It requires an array that describes how you want each column aligned.

--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!

pgsql-general by date:

Previous
From: Greg Sabino Mullane
Date:
Subject: Re: psql --html and to_char()
Next
From: Sagar Tiwari
Date:
Subject: Saw some strange behavior when using `INSERT ON CONFLICT` inside a transaction.