Postgresql Postgres是否不必要地再次将JSON键从jsonb列类型转换为文本?

Postgresql Postgres是否不必要地再次将JSON键从jsonb列类型转换为文本?,postgresql,Postgresql,我使用下面的查询在postgres中创建了一个视图 SELECT JSON_BUILD_OBJECT( 'street', t.data->'address'->>'street', 'area', t.data->'address'->>'area', 'displayLocation', t.data->'address'->>'display

我使用下面的查询在postgres中创建了一个
视图

    SELECT
        JSON_BUILD_OBJECT(
            'street', t.data->'address'->>'street',
            'area', t.data->'address'->>'area',
            'displayLocation', t.data->'address'->>'display_location',
            'postalCode', t.data->'address'->>'postal_code'
        ) AS address
    FROM true_humans t;
创建视图后,我在psql中使用命令
\d+true\u humans\u view
查看视图的查询。 以下是
\d+
命令的结果

      SELECT
        json_build_object(
                   'street', (t.data -> 'address'::text) ->> 'street'::text, 
                   'area', (t.data -> 'address'::text) ->> 'area'::text, 
                   'displayLocation', (t.data -> 'address'::text) ->> 'display_location'::text,                                                          
                    'postalCode', (t.data -> 'address'::text) ->> 'postal_code'::text
        ) AS address
    FROM true_humans t;

Postgres为什么要做“地址”::文本这一类型转换?请帮助我了解博士后的行为

综合评论中对该问题的回答:


你认为字面上的“地址”是什么类型的?你认为文字“2020-03-31”是什么类型?如果您想弄清楚每种类型是什么类型,有什么方便的方法来指定它


引用的文本不能同时是两种类型,是吗?它的类型实际上是“未知引用的事物”,它将根据上下文被解释为特定类型。在这种情况下,您知道您想要文本,PostgreSQL也是如此。这是明确的


谢谢你,Richard Huxton。

从评论中综合回答这个问题:


你认为字面上的“地址”是什么类型的?你认为文字“2020-03-31”是什么类型?如果您想弄清楚每种类型是什么类型,有什么方便的方法来指定它


引用的文本不能同时是两种类型,是吗?它的类型实际上是“未知引用的事物”,它将根据上下文被解释为特定类型。在这种情况下,您知道您想要文本,PostgreSQL也是如此。这是明确的


谢谢,Richard Huxton。

你认为字面的
地址是什么类型的?您认为文字
'2020-03-31'
是什么类型?如果你想弄清楚每一个都是什么类型,那么有什么方便的方法来指定它呢?“Postgres不必要地是类型转换吗”-不,不是t@RichardHuxton“address”是一个字符串,“2020-03-31”可以是DateTime。但是所有的键都应该是字符串,不是吗?所以为什么要再次进行类型转换,我仍然不清楚。引用的文本不能同时是两种类型,不是吗?它的类型实际上是“未知引用的事物”,它将根据上下文被解释为特定类型。在这种情况下,您知道您需要文本,PostgreSQL也是如此。这是明确的。你认为字面的
“地址”
是什么类型?您认为文字
'2020-03-31'
是什么类型?如果你想弄清楚每一个都是什么类型,那么有什么方便的方法来指定它呢?“Postgres不必要地是类型转换吗”-不,不是t@RichardHuxton“address”是一个字符串,“2020-03-31”可以是DateTime。但是所有的键都应该是字符串,不是吗?所以为什么要再次进行类型转换,我仍然不清楚。引用的文本不能同时是两种类型,不是吗?它的类型实际上是“未知引用的事物”,它将根据上下文被解释为特定类型。在这种情况下,您知道您需要文本,PostgreSQL也是如此。这是明确的。