当前位置: 首页 > 知识库问答 >
问题:

对Postgres中所有打印的jsonb使用jsonb_pretty

龙德义
2023-03-14

可以。psqlrc是否配置为将jsonb_pretty应用于打印到控制台的每个jsonb列?

扩展显示自动模式非常有用:https://stackoverflow.com/a/16108898/1007926

我想使用jsonb_pretty和扩展显示。jsonb_pretty通过在字符串中插入新行来工作吗?我想,如果应用于每个JSONBselect,这会导致问题。

jsonb_pretty:https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-JSON-PROCESSING-TABLE

共有2个答案

袁枫涟
2023-03-14

只有psql,我想@Pavel_Stehule是对的(所以不是)。

使用SQLTT,您可以使用钩子破解它。

示例:

// users.sql.js

const sqltt = require("sqltt");
const getUserData = new sqltt({                                               
    hooks: {                                                                
        // Prettier formatting on CLI output:                               
        user_profile: (arg, eng) => eng.match(/(^|_)cli$/) && "jsonb_pretty("+arg+") as "+arg,              
    },                                                                      
    sql: $=>$`                                                              
        select id, name, ${$.literal("user_profile")}                       
        from users                                                          
        where id = ${"userId"} 
    `,                                                                      
});
sqltt.publish(module, {getUserData});

然后你就可以...

安装sqltt:

user@host:~/sqltttest$ npm install sqltt                                    
(...)                                                                       
                                                                            

文件中列出可用查询:

user@host:~/sqltttest$ node user.sql.js                                     
Available queries:                                                          
✓ getUserData:  (Undocumented)                                              
                                                                            

获取合适的psql查询(已插入参数):

user@host:~/sqltttest$ node user.sql.js getUserData 'John Smith'            
\set userId '''John Smith'''                                                
        select id, name, jsonb_pretty(user_profile) as user_profile         
        from users                                                          
        where id = :userId                                                  
                                                                            

...通过管道将其直接连接到psql:

user@host:~/sqltttest$ node user.sql.js getUserData 'John Smith' | psql myDatabase
\set userId '''John Smith'''                                                
        select id, name, jsonb_pretty(user_profile) as user_profile         
        from users                                                          
        where id = :userId                                                  
                                                                            

从节点使用它。js项目:

const {getUserData, ...otherSQL} = require("./user.sql.js");                
const sql = getUserData.sql();                                              
// select id, name, user_profile                                            
// from users                                                               
// where id = $1                                                            
                                                                            

获取非cli sql以与其他语言一起使用:

user@host:~/sqltttest$ node user.sql.js --engine=_nocli getUserData         
                                                                            
        select id, name, user_profile                                       
        from users                                                          
        where id = $1                                                       
                                                                            

...当然,还可以将其存储在普通sql文件中:

user@host:~/sqltttest$ node user.sql.js --engine=_nocli getUserData > getUserData.sql
公西凯捷
2023-03-14

不,这是不可能的psql不支持JSON类型的漂亮打印。

 类似资料:
  • 我有下面的Postgres查询,当通过psql客户端运行时可以很好地工作- 然而,当我通过创建org.hibernate.query对象来运行查询时,我得到了一个类似于这样的异常- psqlexception:错误:运算符不存在:jsonb@>字符变化提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。职位:144 请帮帮忙。我读了以下关于创建一个新类型的帖子,并且Hibern

  • 问题内容: 我试图简单地在ConcurrentHashMap中打印所有键/值对。 我在网上发现了我认为可以做到的代码,但似乎正在获取有关存储桶/哈希码的信息。老实说,实际上输出的结果很奇怪,可能是我的程序不正确,但是我首先要确保这部分是我要使用的部分。 这给出了大约10个不同键的输出,计数似乎是映射中总插入次数的总和。 问题答案: 我测试了您的代码并正常工作。我添加了一个小演示,它用另一种方式打印

  • 问题内容: 我需要能够在数组列表中打印出Student对象(所有变量)。这可能吗?当我尝试打印时,它会输出此类内容。我认为是这样 这是我的代码: 问题答案: 类中的重写方法如下:

  • 我们可以用这里所述的算法求有向图中的圈数。我需要理解算法。 (1)最后那句话到底有什么用处?对algo的工作原理进行简短的描述会很有帮助。由于算法基本上是统计从一个节点返回到同一节点的周期数,所以我们可以使用另一个数组,称之为v,并做以下技巧: (2)我不能实现我刚才写的算法。这是主要的问题,但我认为我需要理解上面的(1)来理解打印所有循环的代码。 我了解到互联网上有算法,我正在尝试使用这个算法。

  • 问题内容: 对于Python中的类,如何定义一个函数以函数中定义的格式打印类的每个实例? 问题答案: 在这种情况下,我看到两个选择: 垃圾收集器 这样做的缺点是,当您有很多对象时,它会非常慢,但会与您无法控制的类型一起使用。 使用mixin和weakrefs 在这种情况下,所有引用都将作为弱引用存储在列表中。如果您经常创建和删除很多实例,则应在迭代后清理弱引用列表,否则会产生很多麻烦。 这种情况下

  • 我需要能够打印出数组列表中的学生对象(所有变量)。这可能吗?当我尝试打印时,它会输出类似的内容,例如。我想是十六进制之类的 这是我的代码: