标签: postgresql

如何在 postgresql 中通过 sql 切换布尔字段?

有一个字段show,它是booleanpostgesql 中的一种类型。

我想编写一个 sql 来更新该表,以切换 show 的值。如果是true,它就变成了false,如果是false,它就变成了true

是否可以?

postgresql

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

简单连接中未使用的主键索引

我有以下表格和索引定义:

CREATE TABLE munkalap (
    munkalap_id serial PRIMARY KEY,
    ...
);

CREATE TABLE munkalap_lepes (
    munkalap_lepes_id serial PRIMARY KEY,
    munkalap_id integer REFERENCES munkalap (munkalap_id),
    ...
);

CREATE INDEX idx_munkalap_lepes_munkalap_id ON munkalap_lepes (munkalap_id);
Run Code Online (Sandbox Code Playgroud)

为什么在以下查询中没有使用 munkalap_id 上的任何索引?

EXPLAIN ANALYZE SELECT ml.* FROM munkalap m JOIN munkalap_lepes ml USING (munkalap_id);

QUERY PLAN
Hash Join  (cost=119.17..2050.88 rows=38046 width=214) (actual time=0.824..18.011 rows=38046 loops=1)
  Hash Cond: (ml.munkalap_id = m.munkalap_id)
  ->  Seq Scan on munkalap_lepes ml  (cost=0.00..1313.46 rows=38046 width=214) (actual time=0.005..4.574 rows=38046 loops=1)
  ->  Hash  (cost=78.52..78.52 rows=3252 …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index join primary-key

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

PostgreSQL 9.1 热备份错误:数据库系统正在启动

我一直在为 Postgres 9.1 进行热备份工作一段时间,但遇到了一个一致的问题。在从服务器上重新启动 Postgres 后,pg_log 目录下的 pgstartup 日志文件和每日日志文件读取没有错误。但是,当我尝试使用 psql 命令进入数据库时​​,出现错误:

致命:数据库系统正在启动。

recovery.conf 文件也不会转为 recovery.done。我已经广泛研究了这个错误并始终找到相同的响应:在我尝试重新启动 Postgres 之前,数据库没有完全关闭。我重新启动 Postgres 的唯一方法是通过service postgresql-9.1 restartor/etc/init.d/postgresql-9.1 restart命令。收到此错误后,我终止了所有进程并再次尝试重新启动数据库,但仍然收到相同的错误。我不知道从哪里开始以及如何解决这个问题。以下是我为完成热备份所做的确切过程。

主服务器配置:

pg_hba.conf,添加了以下行:

主机复制 postgres IPAddressOfSlaveServer 信任

postgresql.conf:

wal_level = hot_standby
max_wal_senders = 5
听地址 = '*'
端口 = 5432
max_wal_senders = 5
wal_keep_segments = 32

从服务器配置:

postgresql.conf:

hot_standby = 开

恢复.conf:

待机模式 = 开
primary_conninfo = host=IPAddressOfMasterServer
端口 = 5432
用户 = postgres
restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "%p"'

配置两台服务器后

我在主服务器上更改为 postgres 用户并运行命令:

psql -c …

postgresql backup

17
推荐指数
3
解决办法
8万
查看次数

为什么有 PostgreSQL Turtle?

我刚刚查看了PostgreSQL宣传页面,我发现了这件小艺术品:

在此处输入图片说明

它是“Turtle Style” PostgreSQL 标志。这是多少岁了,PostgreSQL 是否曾经正式使用乌龟而不是大象?这里有什么故事?

postgresql

17
推荐指数
2
解决办法
1314
查看次数

如何在 Windows 上重置 PostgreSQL 的 postgres 密码?

我已经在我的 Windows 机器上安装了 PostgreSQL 进行开发。现在好久没用了,忘记了用户密码postgres(PostgreSQL默认admin用户)。如何postgres在 Windows 上重置PostgreSQL的密码?


我遵循 Milen 的建议,但在尝试重新加载配置文件时收到此消息:

C:\Program Files\PostgreSQL\9.1\data>pg_ctl reload -D .
pg_ctl: could not send reload signal (PID: 3396): Operation not permitted
Run Code Online (Sandbox Code Playgroud)

在 Windows 中有一个菜单选项“重新加载配置”效果更好,如下所示:

在此处输入图片说明

postgresql windows password-recovery

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

在 pg_restore 期间检查点发生得太频繁

在 PostgreSQL 9.2.2(Windows 32 位)下,我有一个pg_restore命令可以系统地导致有关检查点频率的日志警告,例如:

LOG:  checkpoints are occurring too frequently (17 seconds apart)
HINT:  Consider increasing the configuration parameter "checkpoint_segments".
Run Code Online (Sandbox Code Playgroud)

该数据库大小约为 3.3 Gb,具有 112 个表/160 个视图,并在大约 14 分钟内恢复。

在 a 期间发生这种情况是否正常pg_restore

postgresql configuration restore checkpoint

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

如何将具有外键约束的列添加到已存在的表中?

我有以下表格,

CREATE TABLE users (id int PRIMARY KEY);

-- already exists with data
CREATE TABLE message ();
Run Code Online (Sandbox Code Playgroud)

我如何改变messages表格,

  1. 一个名为的新列sender被添加到其中
  2. sender引用users表的外键在哪里

这没有用

# ALTER TABLE message ADD FOREIGN KEY (sender) REFERENCES users;
ERROR:  column "sender" referenced in foreign key constraint does not exist
Run Code Online (Sandbox Code Playgroud)

这个语句也不会创建列吗?

postgresql foreign-key alter-table

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

为什么不能在同一语句中更新插入 CTE 中的行?

在 PostgreSQL 9.5 中,给定一个使用以下方法创建的简单表:

create table tbl (
    id serial primary key,
    val integer
);
Run Code Online (Sandbox Code Playgroud)

我运行 SQL 来插入一个值,然后在同一个语句中更新它:

WITH newval AS (
    INSERT INTO tbl(val) VALUES (1) RETURNING id
) UPDATE tbl SET val=2 FROM newval WHERE tbl.id=newval.id;
Run Code Online (Sandbox Code Playgroud)

结果是 UPDATE 被忽略:

testdb=> select * from tbl;
????????????
? id ? val ?
????????????
?  1 ?   1 ?
????????????
Run Code Online (Sandbox Code Playgroud)

为什么是这样?这个限制是 SQL 标准的一部分(即存在于其他数据库中),还是特定于 PostgreSQL 可能在未来修复的部分?在使用查询文件说,多次更新不支持,但没有提到INSERT和UPDATE。

postgresql cte

17
推荐指数
2
解决办法
6053
查看次数

删除 Postgres 数据库中的所有数据

我已经从带有--data-only--column-inserts标志的生产服务器创建了一个新的数据库转储,因此在登台服务器上执行还原时,我只有一堆插入语句来插入数据。

pg_dump -h localhost -U adminuser --data-only --column-inserts maindb > maindb.sql
Run Code Online (Sandbox Code Playgroud)

在从生产转储恢复数据之前,如何首先删除登台服务器数据库中的所有数据?

我只想删除所有数据,这样我就不必删除和创建数据库和所有这些东西。我只想删除数据并插入新数据。

由于多种原因,我无法选择删除和​​创建数据库。我将不得不删除所有数据并仅插入,因此无论需要找到如何执行此操作,我都愿意去做,但显然需要帮助才能开始。

我还需要自动化这个过程。将自动“从生产数据库转储数据”,然后“删除暂存数据库上的数据”,然后“将数据恢复到暂存数据库”。我只需要“删除暂存数据库上的数据”部分的帮助。

我在 PostgreSQL 9.5.2 上运行

postgresql pg-dump postgresql-9.5

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

查找链接到 PostgreSQL 角色的对象

前段时间我创建了一个名为user1(PostgreSQL 9.4.9)的 PostgreSQL 用户。

我想放弃这个用户。所以我首先撤销对表、序列、函数、默认权限和所有权的所有权限:

ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON SEQUENCES FROM user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON FUNCTIONS FROM user1;

REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM user1;
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM user1;
REVOKE ALL ON ALL FUNCTIONS IN SCHEMA public FROM user1;

REASSIGN OWNED BY user1 TO postgres;
Run Code Online (Sandbox Code Playgroud)

但是,似乎有一个对象在 …

postgresql permissions

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