如何从pg_timezone_names()中提取名称?

时间:2018-01-31 00:48:10

标签: postgresql

在postgres中,我尝试从pg_timezone_names()https://www.postgresql.org/docs/8.2/static/view-pg-timezone-names.html)中提取名称。现在,它将返回1列中的所有记录。

Postgres的版本是8.0.2,下面的图片是select pg_timezone_names()返回的内容:

enter image description here

3 个答案:

答案 0 :(得分:0)

withEnv(["AWS_REGION=${params.AWS_REGION}"]) {// do stuff }

所以env.MY_VAR='var' echo("My Env var = ${env.MY_VAR}") 是一个返回SETOF的函数。这就是为什么你将整行看作一列,尝试:

t=# \sf pg_timezone_names()
CREATE OR REPLACE FUNCTION pg_catalog.pg_timezone_names(OUT name text, OUT abbrev text, OUT utc_offset interval, OUT is_dst boolean)
 RETURNS SETOF record
 LANGUAGE internal
 STABLE PARALLEL SAFE STRICT
AS $function$pg_timezone_names$function$

或者在超级旧版本的情况下:

pg_timezone_names()

答案 1 :(得分:0)

我花了很多时间在此上转动之后,我想出了如何在Redshift(基于Postgres的旧版本)上进行这项工作的方法。

仅使用select pg_timezone_names()时,它将返回一个复合行记录:

> select top 5 pg_timezone_names()

pg_timezone_names                         
------------------------------------------
(Antarctica/Macquarie,+11,11:00:00,f)     
(Antarctica/McMurdo,NZST,12:00:00,f)      
(Antarctica/Davis,+07,07:00:00,f)         
(Antarctica/Rothera,-03,-03:00:00,f)      
(Antarctica/DumontDUrville,+10,10:00:00,f)

但是,我们需要将复合记录分解为单独的列,然后才能分别使用它们。可以这样做:

> select top 5
  tz.name,
  tz.abbrev,
  tz.utc_offset,
  tz.is_dst
from pg_timezone_names() tz(name text, abbrev text, utc_offset interval, is_dst boolean);

name                      | abbrev | utc_offset | is_dst
--------------------------+--------+------------+-------
Antarctica/Macquarie      | +11    | 11:00:00   | false 
Antarctica/McMurdo        | NZST   | 12:00:00   | false 
Antarctica/Davis          | +07    | 07:00:00   | false 
Antarctica/Rothera        | -03    | -03:00:00  | false 
Antarctica/DumontDUrville | +10    | 10:00:00   | false 

答案 2 :(得分:0)

至少在Postgres 10+上,可以使用pg_timezone_names视图。 只需使用以下查询之一:

select * from pg_timezone_names;

select name from pg_timezone_names