标签: postgresql

不能使用 dropdb 删除 PostgreSQL 数据库吗?

我不能使用删除数据库

dropdb
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

 ERROR:  must be owner of database 
Run Code Online (Sandbox Code Playgroud)

但是psql \l我看到用户管理员(删除数据库的那个)

 admin=CTc/postgres
Run Code Online (Sandbox Code Playgroud)

除了我想删除的数据库。

Linux 中的 PostgreSQL 9.x 有什么问题?

postgresql maintenance linux

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

PostgreSQL 检查点日志解释

我知道 PostgreSQL 检查点是什么以及它何时发生。

我需要一些有关log_checkpoints = on参数生成的日志的附加信息,因此请向我解释其中的一些要点:

2017-09-09 16:31:37 EEST [6428-6524] LOG: checkpoint complete: wrote 30057 buffers (22.9%); 0 transaction log file(s) added, 0 removed, 47 recycled; write=148.465 s, sync=34.339 s, total=182.814 s; sync files=159, longest=16.143 s, average=0.215 s

  1. 我知道 22.9% 的共享缓冲区被写入(我有 1024 MB,shared_buffers所以这意味着 234 MB 被写出)。
  2. 我知道有 47 个 WAL 文件被回收,即崩溃恢复不再需要它们,因为来自它们的真实数据已经在磁盘上。

质疑。但是write=148.465 ssync=34.339呢?有什么不同?什么是write,为什么它的时间远远超过fsync()操作?

问题B。什么是sync files?哪些文件:WAL 文件?为什么sync files是159个,而回收的文件只有47个?它们之间有什么关系?

谢谢!

postgresql checkpoint log write-ahead-logging

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

使用类型代替列定义列表?

运行下面的命令,我得到“返回“记录”的函数需要一个列定义列表

SELECT *
FROM json_to_record('{"a":1,"b":2,"c":3,"d":4}');
ERROR:  a column definition list is required for functions returning "record"
LINE 1: SELECT * FROM json_to_record('{"a":1,"b":2,"c":3,"d":4}');
Run Code Online (Sandbox Code Playgroud)

没关系。我知道它想要什么。

SELECT *
FROM json_to_record('{"a":1,"b":2,"c":3,"d":4}')
  AS (a int, b int, c int, d int);
Run Code Online (Sandbox Code Playgroud)

此外,在 PostgreSQL 中,所有表都已经有一个以相同名称创建的类型。

CREATE TABLE foo(a,b,c,d)
  AS VALUES
    (1,2,3,4);
Run Code Online (Sandbox Code Playgroud)

这将创建一个foo链接到新创建的 table的内部类型foo。不过,我可以很容易地创建一个类似的类型bar

CREATE TYPE bar AS (a int, b int, c int, d int);
Run Code Online (Sandbox Code Playgroud)

能够将返回的记录转换json_to_record()为 bar会很棒。

SELECT *
FROM json_to_record('{"a":1,"b":2,"c":3,"d":4}')
  AS foo; -- bar? anything? …
Run Code Online (Sandbox Code Playgroud)

postgresql datatypes row composite-types

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

使用 Postgres 继承缺失值的长序列

我有一张这样的表:

create table foo (foo_label text, foo_price int, foo_date date);

insert into foo (
          values
          ('aaa', 100,  '2017-01-01'),
          ('aaa', NULL, '2017-02-01'),
          ('aaa', NULL, '2017-03-01'),
          ('aaa', NULL, '2017-04-01'),
          ('aaa', 140,  '2017-05-01'),
          ('aaa', NULL, '2017-06-01'),
          ('aaa', 180,  '2017-07-01')
        );
Run Code Online (Sandbox Code Playgroud)

如您所见,foo_price列上的一些值丢失了。

我需要的是缺失值以这种方式用“前一个”可用值填充:

 foo_label | fixed_foo_price | foo_date
-----------+-----------------+------------
 aaa       | 100             | 2017-01-01
 aaa       | 100             | 2017-02-01
 aaa       | 100             | 2017-03-01
 aaa       | 100             | 2017-04-01
 aaa       | 140             | 2017-05-01
 aaa       | 140             | 2017-06-01
 aaa       | 180 …
Run Code Online (Sandbox Code Playgroud)

postgresql null count window-functions gaps-and-islands

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

使用 TIME WITH TIME ZONE 的有效用例是什么?

沿着这个相关问题的思路:

是否有任何有效的实际使用用例 TIME WITH TIME ZONE或应该将其视为反模式?

需要明确的是:我问的是TIME…,而不是TIMESTAMP…

postgresql database-design datatypes timezone time

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

为公司和股东设计数据库结构

我正在做一个个人项目,我想在其中创建一个数据库,其中包含每个上市公司的每个所有者的信息。例如,说“Sears INC”,程序将获取“Sears INC”中每个所有者的信息。这就是想法。但是我很难构建这个数据库。我对这个主题只有有限的经验和知识,所以任何指导将不胜感激。

现在我首先考虑制作一个名为公司的表格,并为它们提供所有唯一的 ID,并为每个公司制作一张表格。然后在这些表中将是所有所有者及其唯一 ID。这将链接到他们的信息。我试图在这里形象化:

这里

现在我知道为每个公司创建一个表会很乏味,但我想不出任何其他方法来做到这一点。众所周知,每个公司可能有相同的所有者,因此使用 Owner_ID 来识别每个所有者是有意义的。

我在一个 CVS 文件中有所有其他数据,在我构建了数据库之后,我可以很容易地将这些数据导入到 PostgreSQL 中。

任何帮助将不胜感激。

TL:博士;创建一个可按公司名称搜索的股票所有者数据库,并且需要帮助来构建数据库以实现最大效率。

一个人只能有一个电话和一个地址。公司也是如此,因为我制作了一个脚本,可以根据这些信息查找电话。我区分知道一个实体是公司还是个人的方法是使用名为 F_Org 的列,该列对于公司来说将大于 4 位数字。这一切都由脚本处理。

postgresql foreign-key database-design primary-key

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

为什么 Postgres CTE 比子查询慢?

我有一个有点复杂的查询,它拆分字符串并将每个单词作为记录输出。

我做了一个快速测试,一个有 CTE,一个有子查询,看到 CTE 的执行时间是原来的两倍,我有点惊讶。

以下是查询功能的要点:

-- 1. translate matches characters from comment to given list (of symbols) and replaces them with commas.
-- 2. string_to_array splits string by comma and puts in an array
-- 3. unnest unpacks the array into rows
Run Code Online (Sandbox Code Playgroud)

内联子查询

SELECT
    sub_query.word,
    sub_query._created_at
FROM 
(   SELECT unnest(string_to_array(translate(nps_reports.comment::text, ' ,.<>?/;:@#~[{]}=+-_)("*&^%$£!`\|}'::text, ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,'::text), ','::text, ''::text)) AS word,
        nps_reports.comment,
        nps_reports._id,
        nps_reports._created_at
    FROM nps_reports
    WHERE nps_reports.comment::text <> 'undefined'::text
) sub_query 
WHERE sub_query.word IS NOT NULL AND NOT (sub_query.word IN ( SELECT …
Run Code Online (Sandbox Code Playgroud)

postgresql performance cte query-performance

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

选择任何/第一个/最后一个/随机值的聚合函数

我运行一个如下所示的查询

WITH src AS (
    ...
)
SELECT MAX(field1), array_agg(field2)
FROM src
Run Code Online (Sandbox Code Playgroud)

我知道field1从 src 返回的所有行中都是相同的,所以我真的不在乎与它一起使用的聚合函数是MAX还是MIN. 在我的情况下field1是一个数组,所以我很好奇是否有更有效的方法来获取任何field1不包括将其与之前保存的 MIN/MAX 进行比较的开销的方法。如果有一个函数来获取第一个/保留最后一个值field1将是理想的。

postgresql aggregate

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

Postgres 按 Json 数组排序

我有以下 json 存储在 jsonb 字段中。对于代表产品的每条记录,它包含各种类别,每个类别中的 a 是优先级。

[
      {
        "priority": 0,
        "description": "",
        "categoryName": "Cars",
        "title": ""
      },
      {
        "priority": 1,
        "description": "",
        "categoryName": "Trucks",
        "title": ""
      },
      {
        "priority": 2,
        "description": "",
        "categoryName": "Vans",
        "title": ""
      }
    ]
Run Code Online (Sandbox Code Playgroud)

我想使用优先级字段动态地按各种类别对数据进行排序,这样,如果我显示类别 Cars 中的所有产品,我将按 0 数组元素排序,如果我显示类别 Vans 中的所有产品, 我按 2 数组元素排序。

目前,要按第一个数组元素排序,我可以这样做:

ORDER BY OBJECT_DATA->'productCategories'->0->>'priority' 
Run Code Online (Sandbox Code Playgroud)

但是,我想通过首先选择数组值 ( categoryName) 然后使用数组值来选择其优先级来排序。

例如:按卡车排序->优先级 (1)

我正在使用 PostgresSQL 9.6。

postgresql json postgresql-9.6

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

如何使用全文搜索进行中后缀匹配?

我正在尝试在 Postgres 上使用 FTS 在数据库中查找字符串:

select name
from users
where to_tsvector('simple', name) @@ to_tsquery('simple', 'ad:*')
Run Code Online (Sandbox Code Playgroud)

:*搜索只有以广告开头的词。

我发现这个问题 Get partial match from Get partial match from GIN indexed TSVECTORcolumn column。

但是没有提到如何使用FTS解决中后缀匹配的问题?

postgresql full-text-search

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