标签: postgresql

选择与另一个日期范围有 50% 重叠的日期范围

我有一系列包含列的日期范围,例如 start_date、end_date、period_name

   1         100     Roman
 -50          75     Iron Age b
-100          20     Iron Age a
Run Code Online (Sandbox Code Playgroud)

我的团队要求我构建 2 个查询:

  1. 选择罗马时期和任何重叠的时期

  2. 与 1 相同,但仅限重叠 >40% 的范围

我假设我必须在 postgresql (PL/pgSQL) 中编写一个函数,非常欢迎任何帮助。

postgresql plpgsql

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

执行 pg_dump 时出现共享内存不足错误

我有一个包含 3 个模式和大约 1200 个表的 postgres 数据库。当我尝试使用命令仅获取其中的 pg_dump 模式时,pg_dump -h localhost -p 5432 -U postgres -d my_test_db -s有时会出现错误

错误:共享内存不足
提示:您可能需要增加 max_locks_per_transaction

这种情况也是随机发生的,当我重新运行相同的查询时,它运行良好。有什么方法可以克服这个问题

postgresql psql locking pg-dump

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

如何将一个值连接到通过 sql 查询检索到的数组?

我有一个名为“mkvtable”的表,它在各个字符串和字符串数组之间建立对应关系:

  词| MKV字
------+-----------------
 你好 | {世界,朋友}
 再见| {家,永远}
 你好| {伙计们,女士们}

根据PostgreSQL 提供的文档,将值附加到值数组应该是使用连接运算符“||”的简单问题。

但是,如果我尝试将字符串 , 添加到与单词 对应的there字符串数组中,则似乎不会发生任何情况:{fellas,ladies}hi

SELECT mkvword FROM mkvtable WHERE word = 'hi' || 'there';
Run Code Online (Sandbox Code Playgroud)

PostgresSQL 似乎也说了同样的话:

 mkvword
---------
(0 rows)
Run Code Online (Sandbox Code Playgroud)

由于没有抛出任何错误,我认为语法上没有问题。

我究竟做错了什么?我最好的猜测是 psql 感到不安,因为我试图通过使用数组与相邻列中的值的关系来访问数组,但这只是一个未经教育的猜测。也许这种查询与连接运算符不太适合?

TL;DR:如何正确地将值连接到表行中存储的数组?

postgresql array string-manipulation

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

将 Postgres 服务器从 Windows 迁移到 Linux

简单的问题:我想将 Postgres 服务器的所有数据、模式、角色以及所有内容从 Windows 迁移到 Linux。

%PGDATA%我可以只复制Windows 中服务器指向 Linux 的目录内容,然后启动服务器,将 PGDATA 参数/变量指向该目录吗?换句话说,数据文件平台是否独立,使得从一个操作系统移植到另一个操作系统只需复制?

我还开发了一个用于克隆 PG 数据库、架构+数据的脚本,但由于多种原因,我更愿意将数据文件放在 USB 驱动器上并完成它。

postgresql replication datafile

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

如何从 Postgres 系统目录中识别用于对表进行分区的列

鉴于这样创建的表......

CREATE TABLE measurement (
    city_id         int not null,
    logdate         date not null,
    peaktemp        int,
    unitsales       int
) PARTITION BY RANGE (logdate);
Run Code Online (Sandbox Code Playgroud)

如何确定它被分区在哪一列上?- 在本例中,仅通过查询 postgres 目录来获取“logdate”。

我查看了目录中明显的位置(pg_class、pg_index),但没有任何结果。

(使用10.5版本)

postgresql partitioning postgresql-10

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

Postgres 10.5:向非所有者的用户授予完整架构访问权限

因此,我遇到的根本问题是尝试将我的本地 Postgres 10.5 实例迁移到 RDS。RDS 不向最终用户提供该SuperUser角色,因此当我尝试从 pg_dump 导入时遇到了大量权限问题。

例如,以用户身份登录postgres- 这是我创建 RDS 实例时创建的用户。亚马逊所说的“root用户”:

CREATE SCHEMA f_site;
GRANT ALL ON SCHEMA f_site TO postgres;
GRANT ALL PRIVILEGES ON SCHEMA f_site TO postgres;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA f_site TO postgres;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA f_site TO postgres;
GRANT ALL PRIVILEGES ON DATABASE mydb to postgres;
Run Code Online (Sandbox Code Playgroud)

这些都已设置完毕,没有错误。现在,所有者发生了变化:

ALTER SCHEMA f_site OWNER TO schemaadmin;
Run Code Online (Sandbox Code Playgroud)

很好,但是如果我尝试立即运行另一个授权,只是为了测试我的权限,仍然以用户身份登录postgres,同一会话:

GRANT ALL PRIVILEGES ON …
Run Code Online (Sandbox Code Playgroud)

postgresql permissions amazon-rds

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

where 子句中的 PostgreSQL 函数

我有这样的表:

table a (
   id 
   --
   p1 text,
   p2 text,
   p3 text
)
Run Code Online (Sandbox Code Playgroud)

当我编写一些使用该表的函数时,我需要编写这样的代码

create or replace function ...

select * from a
   where a.p1 is not null
     and a.p2 is not null
     and a.p3 is not null
Run Code Online (Sandbox Code Playgroud)

我想创建一个函数,

 create function my_function(??? val) returns boolean as -- what I need to place instead of ???
 $$
 begin
     return val.p1 is not null 
        and val.p2 is not null
        and val.p3 is not null;
 end;
 $$ language plpgsql
Run Code Online (Sandbox Code Playgroud)

其中我将传递当前行的“this”实例(我不知道它是如何调用的),我的函数将如下所示:

select * from …
Run Code Online (Sandbox Code Playgroud)

postgresql functions

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

Postgres 中有没有更简洁的方法来提取字符串的一部分?

我正在使用 Postgres 9.5。我有一个表,其中有一列记录 URL。有时 URL 具有查询字符串,有时则没有。我想提取 URL,减去任何查询字符串,所以我想出了:

select substring(url, 0, case position('?' in url) when 0 then length(url)+1 else position('?' in url) end) 
from article;
Run Code Online (Sandbox Code Playgroud)

这看起来有点罗嗦,我想知道是否有更简洁的方法来做到这一点。我的表列是类型TEXT

postgresql select string substring

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

连接约 40 个标准化表(200 列)以显示详细的用户配置文件。这个可以优化吗?

一个配置文件可以有多种配置文件类型。该配置文件可以有许多字段,这些字段都与查找表相关联。某些字段可以有多种选择。

\n\n
profile -> profile_date -> one relationship status, one zodiac, many languages, many countries traveled, many cuisines, many activities, ...\n\nprofile -> profile_network -> one company, one school, ...\n\nprofile -> ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

字段的查找表如下所示:

\n\n
id  type\n1   \xe2\x99\x88 ARIES\n2   \xe2\x99\x89 TAURUS\n3   \xe2\x99\x8a GEMINI\n4   \xe2\x99\x8b CANCER\n5   \xe2\x99\x8c LEO\n6   \xe2\x99\x8d VIRGO\n7   \xe2\x99\x8e LIBRA\n8   \xe2\x99\x8f SCORPIO\n9   \xe2\x99\x90 SAGITTARIUS\n10  \xe2\x99\x91 CAPRICORN\n11  \xe2\x99\x92 AQUARIUS\n12  \xe2\x99\x93 PISCES\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果该字段是单个选择,我们将加入查找表,然后就完成了。

\n\n
-> profile_date (zodiac_type_id) -> zodiac_type.id\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果字段是多项选择,则中间有一个用于多对多的联接表。

\n\n
-> profile_date -> (profile_date_id) profile_date_languages (language_type_id) -> language_type.id\n
Run Code Online (Sandbox Code Playgroud)\n\n …

postgresql database-design

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

PostgreSQL 日常触发器?

我想向我的 Postgres 数据库添加一个类似触发器的函数。问题是该函数应该每天自动执行一次并更改指定表中的值。

是否可以通过 SQL 语法来执行此操作,还是最好编写一个带有我需要的一些查询的 bash 脚本?

postgresql scripting

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