标签: postgresql

重复键违反唯一约束

当我使用这个查询时,一切都很好:

UPDATE users 
   SET f_name='Mike', 
       l_name='MyLastName', 
       username='blabla', 
       "password"='asdfsdaf', 
       "class"=12, 
       lang='en' 
 WHERE id=50;
Run Code Online (Sandbox Code Playgroud)

我创建了一个结合了两个表的视图:

CREATE OR REPLACE VIEW students_data AS 
SELECT students.id, 
       users.f_name, 
       users.l_name, 
       users.username, 
       users."password", 
       users."class", 
       users.permission, 
       users.sessionid, 
       users.lastlogin, 
       users.lang
  FROM students
  LEFT JOIN users ON students.id = users.id;
Run Code Online (Sandbox Code Playgroud)

我还创建了这个规则:

CREATE OR REPLACE RULE students_data_update AS
    ON UPDATE TO students_data DO INSTEAD  
       UPDATE users 
          SET f_name = new.f_name, 
              l_name = new.l_name, 
              username = new.username, 
              "password" = new."password", 
              "class" = new."class", 
              permission = new.permission, 
              sessionid = new.sessionid, 
              lastlogin = new.lastlogin, 
              lang …
Run Code Online (Sandbox Code Playgroud)

postgresql unique-constraint

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

正确使用数据库功能进行业务逻辑

我在 postgres 中有一个包含 147 个表的数据库;这些表包含由具有系统大部分逻辑的函数生成的数据,例如如何构建会计分录。

这些函数由java中的应用程序调用,该应用程序在代码中几乎没有业务逻辑。

此数据库结构用于不同的客户,其中一些功能对每个客户进行了小的调整,并在功能体中进行了注释。

  1. 大多数逻辑都在数据库中的这种方法是否正确?

  2. 如果您更新数据库中的一个函数并且我们必须将其传递给彼此,我们如何轻松区分哪个函数发生了更改?不要通过错误删除或替换客户端数据库中的更改?

postgresql best-practices stored-procedures functions

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

使用 BBU 存储通过 iSCSI 在 Postgres 上异步提交

我的理解是,synchronous_commit如果您的服务器具有本地电池备份存储控制器,则可以关闭。

在我的环境中,我在一个块存储通过 iSCSI 连接的 VM 上,其中 iSCSI 节点使用 DRBD,并且主节点和辅助节点都有电池备份控制器。

FWIW,具体如下:

  • PostgreSQL 9.3
  • CentOS 6.3 (虚拟机)
  • 虚拟机 5.1
  • Infiniband QDR 传输
  • SLES 11 个 iSCSI 节点
  • DRBD
  • 带有 CacheCade Pro 2.0(使用中)的 LSI BBU SCSI 控制器。

我可以安全关闭synchronous_commit吗?

postgresql

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

有没有办法将执行计划保存在 PostgreSQL 的文件中?

通过将计划保存在文件中,我并不是要查看它,而是强制优化器使用保存的计划来执行某些查询。

例如,如果优化器选择对两表查询进行哈希连接,而我设法强制优化器使用嵌套循环连接,是否有任何方法可以保存嵌套循环连接计划并让优化器接下来使用它我执行相同查询的时间?

postgresql optimization execution-plan

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

Postgres:在master中存档的目的?

我正在阅读有关如何在 Postgres 中设置从 master 到 slave 的流式复制的教程。

一些教程建议在 master 中设置存档(并在 slave 中恢复)。在master中,这需要在conf文件中设置:

wal_level = hot_standby
archive_mode = on
archive_command = 'some rsync command to rsync logfile segments from master to slave'
Run Code Online (Sandbox Code Playgroud)

这个存档的目的是什么?什么时候不需要设置流式复制?

postgresql replication

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

试图用损坏的数据文件夹恢复损坏的 Postgresql 数据库。能够启动 postgres 但表是空的?

Ubuntu 12.04 上的 Postgres 9.3

我们的服务器上有一些磁盘损坏,在执行fsck 后,数据库无法启动。为了让我们重新投入生产,我复制了 postgres 数据文件夹,清除了数据库并从最新的 pg_dump 中恢复。但是我很想从损坏的数据文件夹中的特定表中检索一些数据。

当我尝试使用损坏的数据文件夹启动 postgres 时,由于缺少 xlog 文件而无法启动。所以我使用了 pg_resetxlog 并且它给了我另一个错误:*missing pg_clog/0000*。我怀疑文件在 fsck 修复过程中丢失了,所以我从我正在运行的服务器复制了该文件,并且必须对 *pg_stat_tmp* 文件夹和 *pg_multixact/offsets/0000* 文件执行相同的操作。

现在 postgres 将开始使用损坏的数据文件夹,但是当我 psql 进入它时,所有表似乎都是空的(行数为 0)。一些表似乎完全丢失并抛出一个错误: 无法打开文件“base/16416661/16416776”:没有这样的文件或目录

我所追求的表似乎仍然存在,但它给我的行数为 0,即使 /base 目录中的文件本身是 1Gb 大。

我也试过做一个数据库的 pg_dump,它给了我一个空文件,以及那个特定表的转储,pg_dump 说它找不到(它说这个表不存在,即使 psql 可以看到它)

有没有人了解 /base 文件的内部结构,有什么方法可以从数据库或单个表中恢复数据?

谢谢!

postgresql corruption restore

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

从 hstore 字段中提取所有标签

我需要按对象 id 从 postgres 9.2+postgis 2.1 数据库中提取(复制)所有 hstore 标签到一个外部文件中进行后处理。由于每条记录的键和值各不相同,而且我不知道键或值是什么,因此我必须使用通配符。

遗憾的是,我的秘密解码器环似乎让我失望了,因为我尝试过的一切都没有奏效,可能是因为我所有的专业知识都在 vanilla sql 和 mysql/mariadb 上。

非常感谢您的帮助。

postgresql postgresql-9.2 hstore

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

复杂的更新查询 postgres

我从 table 中得到了一堆 id messages,我想更新 table activities。这就是我想象我的查询会起作用的方式(因此您可以更好地了解我要完成的任务):

update activities
set activities.created_at = messages.created_at,
set activities.updated_at = messages.updated_at
from messages
where messages.id in (1,2,3)
activities.trackable_id in (1,2,3)
Run Code Online (Sandbox Code Playgroud)

在 中activitiestrackable_idmessages表的外键。所以我需要在活动表中为一些消息设置权限created_atupdated_at时间。

所以基本上activity表格是表格的副本,messages但只是另一种格式。

如何更新活动表中某些消息 ID 的 created_at 和 updated_at,但使用消息表中的数据(数据为 updated_at 和 created_at)?

postgresql

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

MySQL 和 PostgreSQL 在编写 SQL 查询方面有什么区别?

除了性能和安全性之外,MySQL 和 Postgres 之间真的有什么区别吗,比如 SQL 查询、内置函数、过程等等?

我问这个是因为我熟悉 PHP 和 MySQL (phpMyAdmin) 但不熟悉 Postgres (phpPgAdmin)

mysql postgresql phpmyadmin php

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

在 postgres 服务器上恢复超级用户帐户

我对 postgres dbms 有一个完全好奇的情况。我已经安装了数据库,由于我的安装脚本配置错误,我将超级用户角色设置为普通用户。现在我有一个完全全新的 postgres 安装,只有模板数据库和一个几乎什么都不做的单个用户“postgres”。我怎样才能让 postgres 用户再次成为超级用户?

我尝试在 ubuntu 12.04 下重新安装服务器,aptitude reinstall postgresql-9.1但角色似乎不受影响。很可能是因为重新安装不会影响记录角色的文件。

postgresql role

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