我在postgres.org电子邮件中找到了一个表达式,这似乎很有用,但是我找不到它的文档。
select t.*::text from t
这里,::text
强制转换似乎适用于每个列,而psql显示的结果输出有点奇怪。也许有人可以教育像我这样的人,解开那个谜。
编辑:奇怪的是,4.2.9. Type Casts部分没有提及此语法
编辑:最后!相关文档位于4.2.13. Row Constructors
答案 0 :(得分:4)
我可以描述发生了什么。请考虑以下语法:
<ul>
@foreach($main_nav as $mainMenu)
<li>
<a href="{{ $mainMenu->page_type == "link-page" ? "$mainMenu->link" : route('home').'/'.$mainMenu->link }}">
{{ $mainMenu->title }}
</a>
</li>
@endforeach
</ul>
这将返回包含两列的记录(或元组)。您可以使用select (1, 2)
或cast()
:
::
select (1, 2)::text
也是如此。它被解释为:
t.*
您将获得相同的结果:
select (t.*)::text
答案 1 :(得分:2)
直接使用表t
的名称(或别名):
SELECT t::text FROM t
t.*
将用于分解行,但由于您将整行转换为文本,因此该步骤是冗余噪声。
cast是可能的,因为Postgres中的所有内容都可以转换为text
。 (必须有输入/输出的文本表示。)
您可以获得该行的文本表示。即输出是有效的字符串文字,您可以将其强制转换为已注册的行类型,如:
SELECT '(123,"some text",,"2017-01-03 02:27:27.930164+01")'::t
t
是表格或(物化)视图的名称(在当前search_path
中可见,或者您必须符合架构资格)或任何其他已注册(行)类型。
这适用于开箱即用的表名,因为Postgres会为您创建的每个表注册一个行类型。
注意,对于匿名记录(例如t.*
或仅ROW(1,2)
),(1,2)
符号和强制转换都不可能。系统目录中没有关于其结构的信息。
相关: