相关疑难解决方法(0)

在Rails和PostgreSQL中完全忽略时区

我正在处理Rails和Postgres中的日期和时间并遇到这个问题:

数据库采用UTC格式.

用户在Rails应用程序中设置选择的时区,但仅在获取用户本地时间来比较时间时使用.

用户存储时间,例如2012年3月17日晚上7点.我不希望存储时区转换或时区.我只想保存日期和时间.这样,如果用户改变他们的时区,它仍将显示2012年3月17日,晚上7点.

我只使用用户指定的时区来获取用户本地时区当前时间之前或之后的记录.

我目前正在使用"没有时区的时间戳",但是当我检索记录时,rails(?)会将它们转换为应用程序中的时区,这是我不想要的.

Appointment.first.time
 => Fri, 02 Mar 2012 19:00:00 UTC +00:00 
Run Code Online (Sandbox Code Playgroud)

因为数据库中的记录似乎是以UTC形式出现的,我的黑客是用当前时间,用'Date.strptime(str,"%m /%d /%Y")删除时区,然后做我的查询:

.where("time >= ?", date_start)
Run Code Online (Sandbox Code Playgroud)

似乎必须有一种更简单的方法来忽略周围的时区.有任何想法吗?

postgresql timezone datetime ruby-on-rails ruby-on-rails-3

156
推荐指数
1
解决办法
3万
查看次数

将一列的多个结果行连接为一个,按另一列连接

我有一张这样的桌子

Movie   Actor   
  A       1
  A       2
  A       3
  B       4
Run Code Online (Sandbox Code Playgroud)

我想得到一部电影的名称和该电影中的所有演员,我希望结果是这样的格式:

Movie   ActorList
 A       1, 2, 3
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

sql postgresql aggregate-functions

112
推荐指数
2
解决办法
15万
查看次数

具有嵌套连接的PostgreSQL 9.2 row_to_json()

我正在尝试使用row_to_json()PostgreSQL 9.2中添加的函数将查询结果映射到JSON .

我无法找出将连接行表示为嵌套对象的最佳方法(1:1关系)

这是我尝试过的(设置代码:表格,示例数据,然后是查询):

-- some test tables to start out with:
create table role_duties (
    id serial primary key,
    name varchar
);

create table user_roles (
    id serial primary key,
    name varchar,
    description varchar,
    duty_id int, foreign key (duty_id) references role_duties(id)
);

create table users (
    id serial primary key,
    name varchar,
    email varchar,
    user_role_id int, foreign key (user_role_id) references user_roles(id)
);

DO $$
DECLARE duty_id int;
DECLARE role_id int;
begin
insert into role_duties (name) values …
Run Code Online (Sandbox Code Playgroud)

postgresql json postgresql-9.2 scalar-subquery

73
推荐指数
2
解决办法
6万
查看次数

在postgres中的聚合函数中进行DISTINCT ON

对于我的问题,我们有一个架构,其中一张照片有很多标签和许多评论.因此,如果我有一个查询,我想要所有的注释和标记,它会将行相乘.因此,如果一张照片有2个标签和13条评论,我会为这张照片获得26行:

SELECT
        tag.name, 
        comment.comment_id
FROM
        photo
        LEFT OUTER JOIN comment ON comment.photo_id = photo.photo_id
        LEFT OUTER JOIN photo_tag ON photo_tag.photo_id = photo.photo_id
        LEFT OUTER JOIN tag ON photo_tag.tag_id = tag.tag_id
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这对大多数事情来说都很好,但这意味着如果我GROUP BY和那时json_agg(tag.*),我得到第一个标签的13个副本和第二个标签的13个副本.

SELECT json_agg(tag.name) as tags
FROM
        photo
        LEFT OUTER JOIN comment ON comment.photo_id = photo.photo_id
        LEFT OUTER JOIN photo_tag ON photo_tag.photo_id = photo.photo_id
        LEFT OUTER JOIN tag ON photo_tag.tag_id = tag.tag_id
GROUP BY photo.photo_id
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

相反,我想要一个只有'郊区'和'城市'的数组,如下所示:

 [
      {"tag_id":1,"name":"suburban"}, 
      {"tag_id":2,"name":"city"}
 ]
Run Code Online (Sandbox Code Playgroud)

我可以json_agg(DISTINCT tag.name),但是当我想要整个行作为json时,这只会产生一个标签名称数组.我想json_agg(DISTINCT ON(tag.name) …

sql postgresql json distinct aggregate-functions

28
推荐指数
4
解决办法
1万
查看次数

获取连接日期和时间列的时间戳

我在数据库中有日期和时间字段.我希望通过连接日期和时间来获得时间戳.如何在PostgreSQL中执行此操作?

我这样做了:

SELECT EXTRACT(EPOCH FROM TIMESTAMP '2011-05-17 10:40:28');
Run Code Online (Sandbox Code Playgroud)

它工作正常.

但是当我尝试替换日期和时间字段时,我收到以下错误:

SELECT EXTRACT(EPOCH FROM TIMESTAMP Day || ' ' || Time);
Run Code Online (Sandbox Code Playgroud)
ERROR:  syntax error at or near "Day"
LINE 1: ...quest_count > 0 AND (EXTRACT(EPOCH FROM TIMESTAMP Day || ' ' || Time)) > (e...
Run Code Online (Sandbox Code Playgroud)

postgresql datetime casting concatenation postgresql-9.1

14
推荐指数
3
解决办法
1万
查看次数

PostgreSQL 左连接查询对象数组聚合

我有2张桌子:

table "person" with columns: person_id, person_name
table "pet" with columns: pet_id, owner_id, pet_name

person data:
1, 'John'
2, 'Jill'
3, 'Mary'

pet data:
1, 1, 'Fluffy'
2, 1, 'Buster'
3, 2, 'Doggy'
Run Code Online (Sandbox Code Playgroud)

如何写SELECT查询语句从person左连接petperson_id = owner_id具有聚合函数,所以我的结果数据的样子:

1,[{pet_id:1,pet_name:'Fluffy'},{pet_id:2,pet_name:'Buster'}],'John'
2,[{pet_id:3,pet_name:'Doggy'}],'Jill'
3,[],'Mary'
Run Code Online (Sandbox Code Playgroud)

sql postgresql json aggregate-functions left-join

11
推荐指数
2
解决办法
4439
查看次数

行构造函数有什么用?

在PostgreSQL中,这个ROW()函数是干什么用的?

具体有什么区别

SELECT ROW(t.f1, t.f2, 42) FROM t;
Run Code Online (Sandbox Code Playgroud)

其中f1is of type int, f2is of typetext

CREATE TYPE myrowtype AS (f1 int, f2 text, f3 numeric);
Run Code Online (Sandbox Code Playgroud)

sql postgresql types row

5
推荐指数
1
解决办法
3577
查看次数

Postgres函数返回一行作为JSON值

我是PG的新手,并尝试从MSSQL转换.

我正在开发一个将返回JSON结果的函数.这个工作:

Create Or Replace Function ExampleTable_SelectList()
Returns JSON As
$$
  Select array_to_json(array_agg(row_to_json(t))) From
    (Select id, value1, value2, From ExampleTable) t
$$ Language SQL;
Run Code Online (Sandbox Code Playgroud)

现在,我想调用可以更新的返回值并将该值转换为JSON以返回.所以,这个给出了set命令的错误.

Create Or Replace Function ExampleTable_Update (id bigint, value1 text)
  Returns JSON As
$$
  Select row_to_json(t) From
  (
    Update ExampleTable
    Set Value1 = value1
    Where id= id
    Returning Value1, Value2;
  ) t
$$ Language SQL;
Run Code Online (Sandbox Code Playgroud)

我怀疑Postgres不允许将该UPDATE语句作为子查询.那还有吗?

postgresql json sql-function postgresql-9.4

3
推荐指数
1
解决办法
4175
查看次数

如何将多列分组为单个数组或类似数组?

我希望我的查询返回这样结构的结果,其中tags是数组或类似数组:

id | name | tags
1    a      [[1, "name1", "color1"], [2, "name2", color2"]]
2    b      [[1, "name1", "color1"), (3, "name3", color3"]]
Run Code Online (Sandbox Code Playgroud)

我希望这个查询可以工作,但它给了我一个错误:

SELECT  i.id, i.name, array_agg(t.tag_ids, t.tag_names, t.tag_colors) as tags 
FROM    ITEMS
LEFT OUTER JOIN (
  SELECT      trm.target_record_id
            , array_agg(tag_id) as tag_ids
            , array_agg(t.tag_name) as tag_names
            , array_agg(t.tag_color) as tag_colors
  FROM        tags_record_maps trm
  INNER JOIN  tags t on t.id = trm.tag_id
  GROUP BY    trm.target_record_id
) t on t.target_record_id = i.id;
Run Code Online (Sandbox Code Playgroud)

错误:

PG::UndefinedFunction: ERROR:  function array_agg(integer[], character varying[], …
Run Code Online (Sandbox Code Playgroud)

sql postgresql json aggregate-functions

3
推荐指数
1
解决办法
4888
查看次数

从 postgres 中选择列到 json 中

我有一个这样的餐桌员工

name     value 
'e1'     'rahul'
'e2'     'priya'
'e3'     'abhijit'
Run Code Online (Sandbox Code Playgroud)

我需要从两列中提取json,结果是这样的

{'e1':'rahul','e2':'priya','e3':'abhijit'}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下查询,结果如下

select row_to_json((name,value)) from employee 

O/P

{'f1':'e1','f2':'rahul'}
{'f2':'e1','f2':'priya'}
{'f3':'e1','f2':'abhijit'}
Run Code Online (Sandbox Code Playgroud)

我不想要那里的 f1 和 f2 名称,请指教!

postgresql json

2
推荐指数
2
解决办法
1万
查看次数