小编Mic*_*ton的帖子

在 postgres 上创建深度嵌套的 JSON 结构而无需编写非常复杂的缩进查询的简单方法是什么?

我将 postgres 数据库中的几个表连接在一起,并将右连接表中的值作为左连接表中的聚合 JSON 结构返回。但是我发现连接的表越多,该查询就会变得越复杂。例如:

select row_to_json(output)
from (
    select image_type.name,
    (
        select json_agg(instances)
        from (
            select image_instance.name, (
                select json_agg(versions)
                from (
                    select image_version.name
                    from image_version
                    where image_version.image_instance_id = image_version.image_instance_id
                ) versions
            ) AS versions
            from image_instance
            where image_instance.image_type_id = image_type.image_type_id
        ) instances
    ) AS images
    from image_type
) output;
Run Code Online (Sandbox Code Playgroud)

我在这里加入了三个表,但是我想再添加几个表,但是代码很快就会变得笨拙且难以维护。有没有一种简单的方法来生成这些类型的聚合连接?

postgresql json

5
推荐指数
1
解决办法
1950
查看次数

如何将'真实世界Haskell'列表数据类型转换为使用Maybe?

我一直在研究'真实世界Haskell',我一直在努力研究如何使用Maybe.我从第3章开始编写了这种数据类型和相应的函数.本书建议尝试将其转换为使用Maybe并摆脱Nil类型.我一直在玩这个,但我无法弄清楚如何做到这一点.我尝试过在不同的地方添加,但我真的只是猜测而不是知道如何去做.

data List a = List a (List a)
            | Nil
            deriving (Show)

toList :: List a -> [a]
toList (List a Nil) = a:[]
toList (List a as)  = a:(toList as)
Run Code Online (Sandbox Code Playgroud)

haskell maybe

3
推荐指数
1
解决办法
132
查看次数

如何从compojure API流式传输大型CSV响应,以便整个响应不会立即保存在内存中?

我是新手使用compojure,但到目前为止一直喜欢使用它.我目前在我的一个API端点中遇到一个问题,即从数据库生成一个大的CSV文件,然后将其作为响应主体传递.

我似乎遇到的问题是整个CSV文件被保存在内存中,然后导致API中的内存不足错误.处理和生成这个的最佳方法是什么,理想情况下是一个gzip压缩文件?是否可以流式传输响应,以便一次返回几千行?当我为相同的数据返回JSON响应主体时,返回它没有问题.

这是我用来返回的当前代码:

(defn complete
  "Returns metrics for each completed benchmark instance"
  [db-client response-format]
  (let [benchmarks  (completed-benchmark-metrics {} db-client)]
    (case response-format
      :json  (json-grouped-output field-mappings benchmarks)
      :csv   (csv-output benchmarks))))

(defn csv-output [data-seq]
  (let [header (map name (keys (first data-seq)))
        out    (java.io.StringWriter.)
        write  #(csv/write-csv out (list %))]
    (write header)
    (dorun (map (comp write vals) data-seq))
    (.toString out)))
Run Code Online (Sandbox Code Playgroud)

data-seq是从数据库返回的结果,我认为这是一个懒惰的序列.我正在使用yesql来执行数据库调用.

以下是此API端点的compojure资源:

(defresource results-complete [db]
  :available-media-types  ["application/json" "text/csv"]
  :allowed-methods        [:get]
  :handle-ok              (fn [request]
                            (let [response-format (keyword (get-in request [:request :params :format] :json))
                                  disposition …
Run Code Online (Sandbox Code Playgroud)

csv clojure out-of-memory large-files compojure

3
推荐指数
1
解决办法
762
查看次数

使用 bookdown 和 pandoc 时,Bibtex 作者在参考文献中显示为虚线

我正在使用 Rmarkdown、bookdown 和 pandoc 生成参考部分。我有一个包含 6 个条目的参考部分。其中一个条目没有作者列表,而是显示为:

———. 2004. “Multimodel Inference.” Sociological Methods & Research 33 (2). SAGE Publications: 261–304. doi:10.1177/0049124104268644.
Run Code Online (Sandbox Code Playgroud)

这个 bibtex 条目如下所示:

@article{burnham2004,
    author = {Burnham, Kenneth P. and Anderson, David R.},
    day = {01},
    doi = {10.1177/0049124104268644},
    issn = {0049-1241},
    journal = {Sociological Methods \& Research},
    keywords = {mdb-article-2017-06},
    month = nov,
    number = {2},
    pages = {261--304},
    posted-at = {2017-06-05 22:18:23},
    priority = {2},
    publisher = {SAGE Publications},
    title = {Multimodel Inference},
    url = {http://dx.doi.org/10.1177/0049124104268644},
    volume …
Run Code Online (Sandbox Code Playgroud)

bibliography pandoc r-markdown bookdown pandoc-citeproc

1
推荐指数
1
解决办法
343
查看次数

如何将在不同端口上运行的多个Docker webserver容器链接到不同的url路径?

如果我有两个Docker容器(A和B)在81和82上发布它们的端口运行,我怎样才能将这些容器链接到在端口80上运行的第三个容器(C),它将不同的URL路径映射到这些不同的容器?

http docker

0
推荐指数
1
解决办法
1172
查看次数