标签: postgresql-9.0

将数组或记录传递给 PostgreSQL 中的函数?

我有一项任务是将数组、记录以及在某些情况下的记录数组作为参数传递给 PostgreSQL 中的函数。

postgresql functions array postgresql-9.0 composite-types

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

选择最长的连续序列

我正在尝试在 PostgreSQL 9.0 中构建一个查询,该查询获取特定列的最长连续行序列。

考虑下表:

lap_id (serial), lap_no (int), car_type (enum), race_id (int FK)
Run Code Online (Sandbox Code Playgroud)

lap_no每个(race_id, car_type). where都是独一无二的。

我希望查询为给定的race_idand生成最长的序列car_type,因此它将返回int最高的(或长的)。

使用以下数据:

1, 1, red, 1
2, 2, red, 1
3, 3, red, 1
4, 4, red, 1
5, 1, blue, 1
6, 5, red, 1
7, 2, blue, 1
8, 1, green, 1
Run Code Online (Sandbox Code Playgroud)

对于car_type = red and race_id = 1查询将5作为lap_no字段的最长序列返回。

我在这里发现了一个类似的问题但是我的情况更简单一些。

(我也想知道car_type …

postgresql window-functions gaps-and-islands postgresql-9.0

12
推荐指数
2
解决办法
9110
查看次数

魔法列“名称”从何而来?

我偶然得到了这个:

db=> select name from site;
ERROR:  column "name" does not exist
LINE 1: select name from site;
               ^
db=> select site.name from site;
     name
---------------
 (1,mysitename)
(1 row)
Run Code Online (Sandbox Code Playgroud)

第二个查询返回一个包含整行的元组。使用 postgres 9.0.1。

编辑:按请求定义站点。我真的不重要,这个怪癖适用于任何桌子。

db=> \d site
                         Table "public.site"
 Column |  Type   |                     Modifiers
--------+---------+---------------------------------------------------
 id     | integer | not null default nextval('site_id_seq'::regclass)
 title  | text    | not null
Run Code Online (Sandbox Code Playgroud)

postgresql database-design postgresql-9.0

11
推荐指数
1
解决办法
2120
查看次数

在按另一个字段分组时,如何正确选择字符串的最大出现次数?

我正在使用 Postgresql 9.0。我在表中有以下字段:id, name.

 id    name 
 1     John
 1     Mary
 1     Mary
 1     Mary
 1     John
 1     Mary
 3     Paul
 3     Paul
 3     George
 .     .
 .     .
Run Code Online (Sandbox Code Playgroud)

对于每个id,我想选择出现次数最多的名称。我怎样才能做到这一点?

我尝试使用以下查询,但它不起作用:

select id, max(name) 
from table 
group by id;
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.0

7
推荐指数
1
解决办法
6613
查看次数

在 PostgreSQL 9.0 中创建 crosstab() 数据透视表

我自己有一个相当复杂的问题,我希望有人可以帮助我。

我想使用 PostgreSQL 来从无几何表创建数据透视表。

为了简单起见,我将只显示我想要用于枢轴的表结构,然后使用给出的方法来创建其他表结构,我希望:)

我想使用的字段是postcode_nospace_, 和ageband

ageband顶部的列是行,postcode_nospace_每个邮政编码的计数是数据。

有 2132 条记录,其中一些记录有多个邮政编码,因此计数。

CREATE TABLE adult_social_care.activities_in_localities_asc
(
  ogc_fid integer NOT NULL,
  sort numeric(5,0),
  ageband character(12),
  postcode_nospace_ character(8),
  wkb_geometry geometry,
  CONSTRAINT activities_in_localities_asc_pkey PRIMARY KEY (ogc_fid)
);
Run Code Online (Sandbox Code Playgroud)

更新:

这是我想要实现的结果,如具有相同数据的 Excel 数据透视表所示。

postcode 18_24  25_34   35_44   45_54   55_64   65_74   Total Count
----------------------------------------------------------------------------
BB115DE     1           2                   2      3       8
FY38LZ                              1       1              2
Run Code Online (Sandbox Code Playgroud)

通过环顾四周,我编译了以下 SQL 查询。它按邮政编码分组并创建所需的字段名称。但是这些字段是空白的。理想情况下,我还希望total_count在表格末尾有一列。

SELECT * FROM crosstab(
    'SELECT postcode_nospace_, ageband, count(ageband) as total_count
     FROM …
Run Code Online (Sandbox Code Playgroud)

postgresql pivot postgresql-9.0

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

Postgres 错误:元组同时更新

我有一个大表测试,其中 user_id 2 有 500000 条记录。所以我想以 100 条记录为单位删除这条记录,但出现错误。这是我的查询:

delete from test where test_id in (select test_id
from test where User_id = 2 limit 100 )
Run Code Online (Sandbox Code Playgroud)

错误:元组同时更新

这是什么问题。我怎样才能解决它。

postgresql postgresql-9.0

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

删除后如何回收磁盘空间而不重建表?

我们的 PostgreSQL 9.0 Windows 生产服务器空间不足。

在我们的 100GB 数据库中,我们有一个包含 TOAST 二进制数据的大表。我们删除了一些行,需要将空间归还给 O/S。

我们没有足够的空间做表的全部重写,所有我的读书CLUSTERVACUUM FULL而且pg_repack是他们需要重写表。到目前为止,我的 google-fu 还不足以找到其他任何东西。

一些停机时间是可以接受的(约 2 小时),但是备份/恢复对于我们的目的来说太慢了,我也不热衷于在步骤之间删除数据库。

问题:如何在不进行全表重写的情况下将磁盘空间返回给 O/S?

(这是一个生产服务器,因此任何解决方案都必须有信誉/推荐/支持等)。

(PS 可以使用一个单独的更大的磁盘,如果可以以某种方式在其上重建表。表空间?)

postgresql windows disk-space vacuum postgresql-9.0

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

在 2 个字符串片段之间查找子字符串

我试图在 Postgres 9.0 的 PostGIS 中填充一个视图,在这个视图中我希望它包含一个基于 2 个字符串位置的子字符串。请参阅下面的我的代码。

CREATE OR REPLACE VIEW vw_actions AS 
 SELECT ls.f_table_schema, ls.f_table_name, 
 (SELECT substr(ls.attribute_actions_text, 
 strpos(ls.attribute_actions_text, 'name="')+6, 
 strpos(ls.attribute_actions_text, '"/>') - 
 strpos(ls.attribute_actions_text, 'name="'))) AS actions
   FROM layer_styles ls;
Run Code Online (Sandbox Code Playgroud)

结果是它在使用 strpos 时不喜欢负数。我可以让它前进 6 个字符以从返回的子字符串中删除 'name="' 但不能删除 '"/>'。

它返回以下内容:

View SHED Database"/> 
Run Code Online (Sandbox Code Playgroud)

我希望它返回的地方:

View SHED Database
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激。

补充:我发现如果我使用 9.1,我可以使用 strposrev 并且我认为以下代码会起作用:

CREATE OR REPLACE VIEW vw_actions AS 
 SELECT ls.f_table_schema, ls.f_table_name, 
 (SELECT substr(ls.attribute_actions_text::text, 
 strpos(ls.attribute_actions_text::text, 'name="'::text)+6, 
 strposrev(ls.attribute_actions_text::text, '"/>'::text)+3 - 
 strpos(ls.attribute_actions_text::text, 'name="'::text))) AS actions
   FROM layer_styles ls;
Run Code Online (Sandbox Code Playgroud)

postgresql view pattern-matching postgresql-9.0

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

将总和列添加到 PostgreSQL 9.0 中的 crosstab() 查询

继我之前的问题之后:

在 PostgreSQL 9.0 中创建 crosstab() 数据透视表

我设法创建了一个数据透视表来ageband使用该crosstab()函数。我可以使用它来创建基本无几何表的视图或表。

但是,这仍然没有多大用处,因为我需要将其链接到gazetteers_and_addresses.unit_postcode表格以分配几何图形以进行进一步分析。

我将附上两个表的表结构和用于创建交叉表的原始代码。

CREATE OR REPLACE VIEW adult_social_care.vw_ageband AS (
    SELECT * FROM crosstab(
        'SELECT postcode_nospace_, ageband, count(ageband) as total_count
         FROM adult_social_care.activities_in_localities_asc
         GROUP BY postcode_nospace_, ageband
         ORDER BY postcode_nospace_'

         ,$$VALUES ('18-24'::text), ('25-34'), ('35-44'), ('45-54'), ('55-64'), ('65-74'), ('75-84'), ('85-94'), ('95 AND OVER')$$)
    AS ct("postcode" text, "18-24" numeric, "25-34" numeric,"35-44" numeric, "45-54" numeric, "55-64" numeric, "65-74" numeric, "75-84" numeric, "85-94" numeric, "95 AND OVER" numeric));
Run Code Online (Sandbox Code Playgroud)

表定义:

activities_in_localities_asc

CREATE …
Run Code Online (Sandbox Code Playgroud)

postgresql datatypes cte pivot postgresql-9.0

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