我目前正在尝试使用 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) 我有一个查询(针对 Postgres 和 Informix),其中NOT IN包含一个子查询,该子查询在某些情况下返回NULL值,导致该子句(以及整个查询)无法返回任何内容。
理解这一点的最佳方式是什么?我认为NULL没有价值的东西,因此不希望查询失败,但显然这不是考虑NULL.
我希望能够生成bytea任意长度(<1Gb)的随机字段来填充测试数据。
这样做的最佳方法是什么?
任何人都可以总结以下之间的区别:
http://www.postgresql.org/docs/9.1/static/xfunc-sql.html
和
http://www.postgresql.org/docs/9.1/static/plpgsql.html
?
要点:
我正在尝试在 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) 我正在尝试连接到远程 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。我不知道还有什么要检查的。
谢谢
我有一个名为“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 对象数组中获取特定字段。
有没有办法查看pg_dump大数据库(即> 1GB)上的操作进度?添加-v选项只会在屏幕上转储文本,但不会给我太多有意义的跟踪信息。
根据和参数的文档,min_wal_sizemax_wal_size默认值为:
对于max_wal_size:The default is 1 GB
对于min_wal_size:The 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 作为我的数据库。我需要在数据库中创建一个条目,如果它已经存在,只需更新其字段,但只有在未设置时才应更新其中一个字段。
我已经使用了这个问题的信息: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)