Skip to content

RAW

Return raw text output instead of JSON formatting.

Keywords

raw, raw_mode, raw_results

Syntax

raw

Examples

Basic Raw Output

sql
create function get_plain_text()
returns text
language sql
as $$select 'Hello, World!'$$;

comment on function get_plain_text() is
'HTTP GET
raw';

Response: Hello, World! (plain text, no JSON wrapping)

Raw with Multiple Columns

sql
create function get_user_info()
returns table(name text, email text)
language sql
as $$select name, email from users limit 1$$;

comment on function get_user_info() is
'HTTP GET
raw';

Response: JohnDoe john@example.com (values concatenated)

CSV Export

sql
create function export_users_csv()
returns table(id int, name text, email text)
language sql
as $$select id, name, email from users$$;

comment on function export_users_csv() is
'HTTP GET
raw
separator ,
new_line \n
columns
Content-Type: text/csv';

Response:

id,name,email
1,John Doe,john@example.com
2,Jane Smith,jane@example.com

Tab-Separated Values

sql
create function export_tsv()
returns table(col1 text, col2 text, col3 text)
language sql
as $$select * from my_table$$;

comment on function export_tsv() is
'HTTP GET
raw
separator \t
new_line \n
Content-Type: text/tab-separated-values';

Pipe-Delimited Format

sql
create function export_data()
returns table(a text, b text, c text)
language sql
as $$...$$;

comment on function export_data() is
'HTTP GET
raw
separator |
new_line \n';

Response:

value1|value2|value3
value4|value5|value6

Download as File

sql
create function download_report()
returns table(data text)
language sql
as $$...$$;

comment on function download_report() is
'HTTP GET
raw
Content-Type: text/csv
Content-Disposition: attachment; filename="report.csv"';

Browser will download the response as a file.

Dynamic CSV Download

Use {param_name} template syntax in headers for dynamic content type and filename:

sql
create function export_data(_type text, _file text)
returns table(id int, name text, email text)
language sql
as $$select id, name, email from users$$;

comment on function export_data(text, text) is
'HTTP GET
raw
separator ,
new_line \n
columns
Content-Type: {_type}
Content-Disposition: attachment; filename={_file}';

Request: GET /api/export-data?_type=text/csv&_file=users.csv

Response headers:

Content-Type: text/csv
Content-Disposition: attachment; filename=users.csv

Response body:

id,name,email
1,John Doe,john@example.com
2,Jane Smith,jane@example.com

Behavior

  • Returns content as plain text instead of JSON
  • Multiple columns are concatenated (use separator to delimit)
  • Multiple rows are concatenated (use new_line to delimit)
  • Use with Content-Type header to set appropriate media type

Released under the MIT License.