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

将adminer中的postgresql json表视为(可排序的)表

司寇昱
2023-03-14

在adminer中将json表视为(可排序)表

我在数据库表中有一个jsonb字段,我希望能够将其保存为管理员中的视图,以便我可以像标准数据库表一样快速搜索和排序字段。

我想知道json列管理员插件是否有帮助,但我不知道如何使用它。

我正在使用管理员docker映像,我相信它已经内置了插件。

如果我有这样一个数据库(有人为了上一个问题把这把小提琴放在一起)

CREATE TABLE prices( sub_table JSONB );

INSERT INTO prices VALUES
('{ "0": {"Name": "CompX", "Price": 10, "index": 1, "Date": "2020-01-09T00:00:00.000Z"},
    "1": {"Name": "CompY", "Price": 20, "index": 1, "Date": "2020-01-09T00:00:00.000Z"},
    "2": {"Name": "CompX", "Price": 19, "index": 2, "Date": "2020-01-10T00:00:00.000Z"}
}');

和查看表的子集

SELECT j.value
  FROM prices p
 CROSS JOIN jsonb_each(sub_table) AS j(e)
 WHERE (j.value -> 'Name')::text = '"CompX"'

我想在Adminer中查看下表

| Date                     | Name  | Price | index |
| ------------------------ | ----- | ----- | ----- |
| 2020-01-09T00:00:00.000Z | CompX | 10    | 1     |
| 2020-01-10T00:00:00.000Z | CompX | 19    | 2     |
|                          |       |       |       |

与之相反:

| value                                                        |
| ------------------------------------------------------------ |
| {"Date": "2020-01-09T00:00:00.000Z", "Name": "CompX", "Price": 10, "index": 1} |
| {"Date": "2020-01-09T00:00:00.000Z", "Name": "CompX", "Price": 10, "index": 1} |

编辑-建立在一匹没有名字的马的答案上。以下内容保存了具有适当列的视图,然后可以在Adminer中以与标准表相同的方式进行搜索/排序。

CREATE VIEW PriceSummary AS
select r.*
from prices p
  cross join lateral jsonb_each(p.sub_table) as x(key, value)
  cross join lateral jsonb_to_record(x.value) as r("Name" text, "Price" int, index int, "Date" date)

共有2个答案

宰父跃
2023-03-14

json列adminer插件将在某种程度上完成这项工作,因为它将更好地显示json值。

这里是一个最小的docker组合。yml创建postgres conatiner并将管理员链接到它。要在管理员容器中安装插件,可以使用环境变量adminer\u plugins,如下所示:

version: '3'
services:
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    environment:
      - ADMINER_PLUGINS=json-column tables-filter tinymce
    ports:
      - 9999:8080

localhost:9999访问管理员Web UI。使用用户名: postgres,密码:示例连接到postgres数据库。

当您编辑包含JSON列的表时,它将显示如下:

仰雅昶
2023-03-14

没有可用的自动转换,但您可以将JSON值转换为记录,以使显示更容易:

select r.*
from prices p
  cross join lateral jsonb_each(p.sub_table) as x(key, value)
  cross join lateral jsonb_to_record(x.value) as r("Name" text, "Price" int, index int, "Date" date)
where r."Name" = 'CompX'

在线示例

 类似资料:
  • 我已经成功地实现了一个google可视化表,并通过添加events listener为一列添加了自定义排序过程。 背景:数据来自数据库以呈现表。我有几个表列带有“Status”列。此列应根据不显示该表的另一个数据字段进行排序。(所有数据都来自数据库,只需一次查询。它们都运行良好。)在addListener中,我根据自己的需求对从数据库中获取的数组进行排序,并通过

  • 问题内容: 我正在尝试使用排序对象列表 但是,如果任何列表项包含而不是, 然后我得到一个 在Py2中,这不是问题。如何在Py3中处理此问题? 问题答案: 排序比较运算符约在Python 3种严格,如描述在这里: 当操作数没有有意义的自然顺序时,顺序比较运算符(<,<=,> =,>)会引发TypeError异常。 Python 2在任何字符串(甚至是空字符串)之前进行排序: 在Python 3中,任

  • 我想在pematon/adminer定制包中使用tables filter插件。 Tables过滤器可以与普通管理员配合使用。 问题:在pematon/adminer-自定义表-过滤器不显示在屏幕上。 我一直在查看源代码,试图找到可能排除或隐藏它的内容。我找不到是什么阻止了它的出现。 有人可以建议我如何在pematon/adminer自定义中启用表过滤器吗? 管理员自定义 管理员原件 表过滤器插件

  • 如何将按排序顺序转换为而不更改()?我们希望保留和。 将2,3,1添加到将其排序为1,2,3。从创建一个将具有2,3,1的顺序。中的和方法也将具有2,3,1的顺序。我猜这与的实现有关。

  • 问题内容: 我正在尝试对从JSON源填充的数据表进行排序。我的代码如下: HTML: JS: 小提琴:http : //jsfiddle.net/7czsM/1/ 如您所见,我试图将click函数添加到表标题中,以调用对数据进行排序的函数,但是它不起作用。 我已经在这里看到了这种方法的示例,该示例可以起作用:http : //jsfiddle.net/vojtajina/js64b/14/,但是当

  • 我正在做一个项目,所以我把我的问题简化为: 任何帮助都将不胜感激。