首页 > 解决方案 > nginx + PostgreSQL:返回 JSON 对象

问题描述

我喜欢运行 PostgreSQL 10 服务器作为后端,使用ngx_postgres作为前端的 nginx。数据库以 JSONB 格式存储数据:

=# CREATE TABLE dump (
   id   bigserial primary key,
   data jsonb     not null
);

可以像这样查询数据:

=# SELECT data FROM dump;

使用 ngx_postgres,可以直接从 nginx 访问 PostgreSQL 数据库:

upstream postgresql {
    postgres_server localhost dbname=default user=user password=secret;
}

server {
    listen 80;

    location /postgresql/ {
        rds_json          on;

        postgres_pass     postgresql;
        postgres_query    HEAD GET "SELECT data FROM dump"
        postgres_rewrite  no_rows 410;
        postgres_output   rds;
    }
}

但结果以文本形式返回,带有转义的双引号,而不是预期的 JSON:

[{"data":"{\"id\": \"00ce160e5cbb49b9bc2ee6f243f87841\", \"name\": \"foo\"}"}] 

如何将查询结果作为 JSON 对象返回?

标签: jsonpostgresqlnginxjsonb

解决方案


你可以试试 c2h5oh 框架。它是一个快速、轻量级的框架,用于使用 Nginx 和 PostgresSQL 的强大功能构建 Web 应用程序

https://github.com/genosse/c2h5oh/


推荐阅读