标签: postgresql

在 PL/pgSQL 中是否有一种简单的方法来检查查询是否没有返回结果?

我目前正在尝试使用 PL/pgSQL,想知道是否有更优雅的方法来做这样的事情:

select c.data into data from doc c where c.doc_id = id and c.group_cur > group_cur order by c.id desc limit 1;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        select c.data into data from doc c where c.doc_id = id and c.global_cur > global_cur order by c.id desc limit 1;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                RETURN NULL;
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql

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

为什么 NOT IN 包含 NULL 的集合总是返回 FALSE/NULL?

我有一个查询(针对 Postgres 和 Informix),其中NOT IN包含一个子查询,该子查询在某些情况下返回NULL值,导致该子句(以及整个查询)无法返回任何内容。

理解这一点的最佳方式是什么?我认为NULL没有价值的东西,因此不希望查询失败,但显然这不是考虑NULL.

postgresql null query informix

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

如何生成随机字节

我希望能够生成bytea任意长度(<1Gb)的随机字段来填充测试数据。

这样做的最佳方法是什么?

postgresql testing random bytea

21
推荐指数
3
解决办法
5017
查看次数

21
推荐指数
2
解决办法
8016
查看次数

Postgres 不完整的启动包错误

我正在尝试在 Ubuntu 14.04 上安装 Postgres 9.3,但在启动时遇到令人讨厌的错误。这是我所看到的:

$ sudo service postgresql restart
* Restarting PostgreSQL 9.3 database server
* Error: could not exec /usr/lib/postgresql/9.3/bin/pg_ctl /usr/lib/postgresql/9.3/bin/pg_ctl start -D /var/lib/postgresql/9.3/main -l /var/log/postgresql/postgresql-9.3-main.log -s -o  -c config_file="/etc/postgresql/9.3/main/postgresql.conf" : [fail]
Run Code Online (Sandbox Code Playgroud)

所以我用这个输出检查了日志文件:

 2015-01-05 21:50:05 EST LOG:  database system was shut down at 2015-01-05 21:50:03 EST
 2015-01-05 21:50:05 EST LOG:  database system is ready to accept connections
 2015-01-05 21:50:05 EST LOG:  autovacuum launcher started
 2015-01-05 21:50:06 EST LOG:  incomplete startup packet
 2015-01-05 21:51:22 EST ERROR:  syntax error …
Run Code Online (Sandbox Code Playgroud)

postgresql errors error-log

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

无法连接到远程 postgresql 数据库

我正在尝试连接到远程 psql 数据库。在我使用客户端的 IP 地址添加 pg_hba.conf 条目之前,我收到一条错误消息:

xdev@xdevbox:~$ psql -U postgres testdb -h 10.1.1.47
psql: FATAL:  no pg_hba.conf entry for host "10.201.50.71", user "postgres", database "testdb", SSL off
Run Code Online (Sandbox Code Playgroud)

我使用信任设置添加了客户端的 IP。我还在服务器上的postgres.conf 中更改了监听地址来监听“*”。然后我使用 /etc/init.d/postgresql restart 命令重新启动了数据库服务器。

现在,当我尝试连接时,收到以下错误消息:

psql: could not connect to server: Connection refused
    Is the server running on host "10.1.1.47" and accepting
    TCP/IP connections on port 5432?
Run Code Online (Sandbox Code Playgroud)

在 postgresql.conf 中,端口设置为 5432。我不知道还有什么要检查的。

谢谢

postgresql remote

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

如何从 PostgreSQL 中的 jsonb 数组中获取特定对象?

我有一个名为“user”的字段,其中包含一个大致如下所示的 json 数组:

"user"

[{ "_id" : "1", "count" : "4" }, { "_id" : "3", "count": "4"}]
Run Code Online (Sandbox Code Playgroud)

现在我想要一个像这样的查询:

select count from tablename where id = "1"
Run Code Online (Sandbox Code Playgroud)

我无法count从 PostgreSQL 9.4 中的 json 对象数组中获取特定字段。

postgresql array json postgresql-9.4

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

如何跟踪大型 postrgresql 转储的进度

有没有办法查看pg_dump大数据库(即> 1GB)上的操作进度?添加-v选项只会在屏幕上转储文本,但不会给我太多有意义的跟踪信息。

postgresql dump postgresql-9.2 pg-dump

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

了解 postgresql.conf 文件中的“max_wal_size”和“min_wal_size”参数默认值

根据参数的文档,min_wal_sizemax_wal_size默认值为:

对于max_wal_sizeThe default is 1 GB
对于min_wal_sizeThe default is 80 MB

然后我从我的数据库配置中查看这些参数:

select name, setting, unit 
from pg_settings 
where name in ('min_wal_size', 'max_wal_size')
Run Code Online (Sandbox Code Playgroud)

给出结果:

name         |  setting | unit
----------------------------------
max_wal_size | 64       | 
min_wal_size | 5        |
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

1) 为什么这些值与文档中显示的默认值不匹配?我从来没有改变过配置设置。

2) 为什么unit这些参数的列是空的/NULL?在这种情况下,64 和 5 值是什么意思?MB? GB? 或者是什么?

为什么这不像例如 work_mem参数,当一切都清楚时:

name         | setting  | unit
----------------------------------
work_mem     | 4096     | kB
Run Code Online (Sandbox Code Playgroud)

postgresql configuration write-ahead-logging postgresql-9.5

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

将元素插入表格时,“列引用不明确”

我使用 PostgreSQL 作为我的数据库。我需要在数据库中创建一个条目,如果它已经存在,只需更新其字段,但只有在未设置时才应更新其中一个字段。

我已经使用了这个问题的信息:https : //stackoverflow.com/questions/13305878/dont-update-column-if-update-value-is-null,它与我所拥有的非常相关。

我尝试使用此查询,但是当我运行它时,它会出错Column reference 'affiliate_code' is ambiguous

INSERT INTO accounts (id, token, affiliate_code)
VALUES (value1, value2, value3)
ON CONFLICT (id) DO
UPDATE SET token = value2,
  affiliate_code = COALESCE(affiliate_code, value3);
Run Code Online (Sandbox Code Playgroud)

(当然,实际值会被替换)。

如果我替换affiliate_code = COALESCE(affiliate_code, value3)affiliate_code = value3,一切正常,但不是我想要的方式。

我怎样才能使这项工作?

这是我的表的定义方式:

CREATE TABLE accounts (
  id VARCHAR NOT NULL UNIQUE,
  token VARCHAR NOT NULL,
  affiliate_code VARCHAR
);
Run Code Online (Sandbox Code Playgroud)

postgresql upsert coalesce

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