Understanding the QUOTE_LITERAL() Function in PostgreSQL

In PostgreSQL, we can use the quote_literal() function to quote strings within a SQL statement string.

Any embedded single-quotes and backslashes are properly doubled.

Examples

Here’s an example to demonstrate:

SELECT quote_literal('Homer');

Result:

'Homer'

Just to be sure, here’s a comparison of the same value quoted verses unquoted:

SELECT 
    'Homer' AS "Unquoted",
    quote_literal('Homer') AS "Quoted";

Result:

 Unquoted | Quoted  
----------+---------
Homer | 'Homer'

Here are a few more examples:

\x
SELECT 
    quote_literal('Homer Simpson') AS "'Homer Simpson'",
    quote_literal(E'Homer\'s IQ') AS "E'Homer\'s IQ'",
    quote_literal(' ') AS "' '",
    quote_literal('100') AS "'100'";

Result (using vertical output):

'Homer Simpson' | 'Homer Simpson'
E'Homer\'s IQ' | 'Homer''s IQ'
' ' | ' '
'100' | '100'

Passing a Non String

It’s possible to pass non string values, such as numbers and dates. In such cases, the result will be output as text:

SELECT 
    quote_literal(100) AS "100",
    quote_literal(1.5) AS "1.5",
    quote_literal('2025-06-07'::date) AS "'2025-06-07'::date",
    quote_literal(ARRAY[1,2,3]) AS "ARRAY[1,2,3]";

Result (using vertical output):

100                | '100'
1.5 | '1.5'
'2025-06-07'::date | '2025-06-07'
ARRAY[1,2,3] | '{1,2,3}'

Passing a Null Value

Passing a null value results in null being returned:

SELECT quote_literal(null);

Result:

null

There’s also a quote_nullable() function that can be used instead, if you anticipate the argument to be null. The quote_nullable() function returns the actual string NULL if the argument is null.