标签: postgresql

在PostgreSQL中检查两个表的内容是否相同

这已经在 Stack Overflow 上问过了,但仅限于 MySQL。我正在使用 PostgreSQL。不幸的是(而且令人惊讶的是)PostgreSQL 似乎没有像CHECKSUM table.

PostgreSQL 解决方案会很好,但通用的解决方案会更好。我找到了http://www.besttechtools.com/articles/article/sql-query-to-check-two-tables-have-identical-data,但我不明白使用的逻辑。

背景:我重新编写了一些数据库生成代码,所以我需要检查新旧代码是否产生相同的结果。

postgresql duplication

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

CPU 性能与数据库服务器相关吗?

这是一个纯理论问题。假设我在多台服务器上部署了一个应用程序。

  1. 负载均衡器,
  2. 多个/可扩展的应用程序服务器
  3. 一个(单一的)数据库服务器(目前)

在前两个部分,我知道要寻找什么。但是数据库服务器呢?我应该寻找什么样的硬件?

  • CPU 频率与数据库服务器相关吗?
  • 多核 CPU 是否相关?
  • RAM比CPU重要吗?

PS:假设选择的数据库是 MySQL 或 PostgreSQL。

mysql postgresql performance

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

Postgres 中的权限被拒绝

我将用户添加myuser到 Postgres。

然后我mydatabase在 pgAdmin III GUI 中添加了数据库并从备份文件中恢复。所以拥有者mydatabase是超级用户postgres

然后我试图给所有的访问权和修改mydatabasemyuser。我psql以用户身份登录postgres

psql -d template1 -U postgres  
Run Code Online (Sandbox Code Playgroud)

然后我运行了这个查询:

GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser
Run Code Online (Sandbox Code Playgroud)

现在我可以myuser用来记录,但如果我尝试一个简单的查询,我会得到这个错误:

ERROR:  permission denied for relation table_name
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?你能帮我解决吗?

postgresql permissions

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

LC_CTYPE 对 PostgreSQL 数据库有什么影响?

所以,我有几个带有 PostgreSQL 的 Debian 服务器。从历史上看,这些服务器和 PostgreSQL 使用拉丁文 9 字符集进行了本地化,当时还可以。现在我们必须处理波兰语、希腊语或中文等问题,因此改变它成为一个日益严重的问题。

当我尝试创建 UTF8 数据库时,收到消息:

错误:编码 UTF8 与语言环境 fr_FR 不匹配 详细信息:所选的 LC_CTYPE 设置需要编码 LATIN9。

有几次我和我的老朋友 Google 对这个主题进行了一些研究,我能找到的只是一些过于复杂的过程,比如更新 Debian LANG、使用正确的字符集重新编译 PostgreSQL、编辑所有LC_系统变量和其他晦涩的解决方案。所以暂时,我们把这个问题放在一边。

最近,它又回来了,希腊人想要这些东西,而拉丁语 9 不想。当我再次研究这个问题时,一位同事冲我说:“不,这很容易,你看。”

他什么也没编辑,也没有做魔术,他只是做这个 SQL 查询:

CREATE DATABASE my_utf8_db
  WITH ENCODING='UTF8'
       OWNER=admin
       TEMPLATE=template0
       LC_COLLATE='C'
       LC_CTYPE='C'
       CONNECTION LIMIT=-1
       TABLESPACE=pg_default;
Run Code Online (Sandbox Code Playgroud)

它工作得很好。

我实际上并不知道,LC_CTYPE='C'而且我很惊讶在 Google 甚至 Stack Overflow 上的第一个解决方案中都没有使用它。我环顾四周,只在 PostgreSQL 文档中找到了一个提及。

当 LC_CTYPE 为 C 或 POSIX 时,允许使用任何字符集,但对于 LC_CTYPE 的其他设置,只有一种字符集可以正常工作。由于 LC_CTYPE 设置被 initdb 冻结,因此在集群的不同数据库中使用不同编码的明显灵活性比实际更具理论性,除非您选择 C ​​或 POSIX 语言环境(从而禁用任何真正的语言环境感知)。

所以这让我想知道,这太容易了,太完美了,有什么缺点?而且我还很难找到答案。所以我来这里发帖:

tl; dr:使用 …

postgresql collation

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

PostgreSQL 在本地运行,但我无法连接。为什么?

最近将我的机器从 Mac OS X Lion (10.7.4) 更新到 Mountain Lion (10.8),我认为它破坏了我的 PostgreSQL 安装。它最初是通过 Homebrew 安装的。我不是 DBA,但希望有人能告诉我如何解决这个问题。

我无法连接(但在前 Mountain Lion 之前能够连接):

$ psql -U rails -d myapp_development
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)

但是 Postgres 显然还在运行:

$ ps aux | grep postgres
meltemi          2010   0.0  0.0  2444124   5292   ??  Ss   Wed01PM   0:00.02 postgres: rails myapp_development [local] idle    
meltemi           562   0.0  0.0  2439312    592   ?? …
Run Code Online (Sandbox Code Playgroud)

postgresql psql mac-os-x

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

如何确定PostgreSQL中是否有[空闲连接]未提交的事务?

根据我对 PostgreSQL 9.2 中的空闲连接问题的评论,一些未提交的事务(可能与其中一些空闲连接有关)可能会导致一些性能问题。

确定是否存在未提交的事务的好方法是什么(如果有办法知道它们所在的连接是否空闲,则加分)?

非常感谢!

postgresql performance database-design

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

PostgreSQL 角色与用户,授予权限

我目前正在学习 PostgreSQL 和 MySQL 之间的差异,因为我有一个新项目,而且我还打算将我现有的软件从 MySQL 迁移到 PostgreSQL。我实际上已经开始创建一个 HTML 表,比较两者之间的命令(用于用户/数据库/命令提示符等)。在阅读了这里的答案后,我注意到它role似乎被用作一个组。与MySQL我有两个用户,基本公共(DELETEINSERTSELECTUPDATE权限),并与一对夫妇的额外权限的管理员用户。

所以基本上在 Windows 7 命令提示符下(仅限本地开发)...

  • 角色是特定于 PostgreSQL 的用户、组或松散使用的术语吗?
  • 对于数据库中的所有表,如何仅向特定用户授予特定权限?
  • 如何将数据库中所有表的所有权限授予特定用户?
  • 在使用GRANTREVOKE获得用户权限时,角色与用户相比如何(如果有的话)?

postgresql users

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

pg_restore: [archiver (db)] 无法执行查询:错误:架构“public”已经存在

我正在使用 pg_dump / pg_restore 来备份和恢复 PostgreSQL 数据库,但是从 pg_restore 收到一些错误消息(和非零退出状态)。我尝试了一个超级简单的基本案例(如下所述),但仍然出现以下错误:

pg_restore: [archiver (db)] 处理 TOC 时出错:
pg_restore: [archiver (db)] 目录条目 5 中的错误;2615 2200 SCHEMA公共postgres
pg_restore: [archiver (db)] 无法执行查询:错误:架构“public”已经存在
    命令是:CREATE SCHEMA public;

重现步骤:

  1. 安装一个全新的、原版的 Ubuntu 14.04 发行版(我在这个 Vagrant box 中使用 Vagrant )。
  2. 安装 PostgreSQL 9.3,配置为允许任何 Linux 用户以 PostgreSQL 用户“postgres”的身份进行本地连接。
  3. 创建一个测试数据库。我只是在做:

    vagrant@vagrant-ubuntu-trusty-64:~$ psql --username=postgres postgres
    psql (9.3.5)
    输入“帮助”以获得帮助。
    
    postgres=# 创建数据库 mydb;
    创建数据库
    postgres=# \q
    vagrant@vagrant-ubuntu-trusty-64:~$ psql --username=postgres mydb
    psql (9.3.5)
    输入“帮助”以获得帮助。
    
    mydb=# 创建表数据(条目 bigint);
    创建表
    mydb=# 插入数据值(1);
    插入 0 1
    mydb=# …

postgresql backup restore

33
推荐指数
3
解决办法
7万
查看次数

Postgres 多列到 json

我正在运行 postgresql 9.3.4。我有一个包含 3 个字段的表:

id   name  addr
---  ----  ----
1    n1    ad1
2    n2    ad2
...
Run Code Online (Sandbox Code Playgroud)

我需要将数据移动到包含以下字段的新表:

id   data
---  ----
1    {'name': 'n1', 'addr': 'ad1'}
2    {'name': 'n2', 'addr': 'ad2'}
...
Run Code Online (Sandbox Code Playgroud)

row_to_json对我来说不是解决方案,因为它也SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) t增加id了结果。有没有办法在我的数据字段中选择我需要的字段(名称和地址)?

postgresql row json

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

从列表中查找表中不存在的 ID

假设我有以下架构和数据:

create table images(
  id int not null
);

insert into images values(1), (2), (3), (4), (6), (8);
Run Code Online (Sandbox Code Playgroud)

我想执行如下查询:

select id from images where id not exists in(4, 5, 6);
Run Code Online (Sandbox Code Playgroud)

但这不起作用。上面的情况应该返回5,因为它不存在于表记录中。

postgresql if-not-exists

33
推荐指数
3
解决办法
6万
查看次数