标签: postgresql

如何指定应在 pgAdmin 中自动递增的列?

我已经开始学习 pgAdmin III 来管理 PostgreSQL 数据库。但这不是一个易于使用的应用程序。

如果我使用 pgAdmin III 创建或已经创建了一个表,如何在具有整数类型的列 id 上添加“自动增量”功能?

postgresql pgadmin auto-increment

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

在 PostgreSQL 中查找表的空列

什么查询会返回所有行都为 NULL 的表的列名?

schema postgresql null database-design

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

PostgreSQL 9.1 中的自动故障转移

如何在 PostgreSQL 9.1 中设置两台相同的服务器以进行自动故障转移。

操作系统

Centos 5
PostgreSQL 9.1 源码编译
postgres 用户账号存在于两台机器上,并且有一个 ssh 无密码密钥,可以连接两台机器。

我当前的设置:

主服务器配置:

postgresql.conf:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  
Run Code Online (Sandbox Code Playgroud)

pg_hba.conf:

 host  replication   all   10.0.66.1/32      trust
 host  replication   all   10.0.66.2/32      trust
Run Code Online (Sandbox Code Playgroud)

备用服务器

postgresql.conf 和 pg_hba.conf 与主服务器上配置的相同。

恢复.conf:

 standby_mode = 'on'
 primary_conninfo = 'host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'
Run Code Online (Sandbox Code Playgroud)

感谢 hzRoot,我现在明白了如何将服务器从备用服务器切换到主服务器。

使用以下命令,我可以将新从站与新主站同步,然后获取复制备份并运行。

在新主 (10.0.66.2) 上

  1. su - postgres
  2. 触摸 /opt/pgsql91/data/ 中的 trigger.txt
  3. recovery.conf …

postgresql failover

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

索引不与 = ANY() 一起使用,但与 IN 一起使用

t有两个索引:

create table t (a int, b int);
create type int_pair as (a int, b int);
create index t_row_idx on t (((a,b)::int_pair));
create index t_a_b_idx on t (a,b);

insert into t (a,b)
select i, i
from generate_series(1, 100000) g(i)
;
Run Code Online (Sandbox Code Playgroud)

ANY运算符不使用索引:

explain analyze
select *
from t
where (a,b) = any(array[(1,1),(1,2)])
;
                                            QUERY PLAN                                             
---------------------------------------------------------------------------------------------------
 Seq Scan on t  (cost=0.00..1693.00 rows=1000 width=8) (actual time=0.042..126.789 rows=1 loops=1)
   Filter: (ROW(a, b) = ANY (ARRAY[ROW(1, 1), ROW(1, 2)]))
   Rows Removed …
Run Code Online (Sandbox Code Playgroud)

postgresql index optimization execution-plan postgresql-9.4

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

什么是特殊数据库“postgres”?

我有一个 PostgreSQL 服务器,上面运行着多个数据库。其中一个数据库名为postgres,它从一开始就存在。我看不到里面的任何表,我从来没有明确使用过它,但我注意到,任何用户都可以在数据库中创建表(这不是我想要的 - 我不希望除管理员之外的任何用户创建任何地方的任何桌子)。

我有一种感觉,它是服务器正常运行所需的某种特殊数据库,但它的目的究竟是什么?什么样的数据(或可能)存储在里面?它是否保存有关其他数据库的元数据(例如information_schema?)。如果我connect从公众那里撤销对该数据库的特权,会发生什么令人讨厌的事情吗?或者,如果我什至放弃它?

我用谷歌搜索了半个小时,但总是得到完全不相关的东西,因为这个词postgres也用于用户postgres和 DBMS 本身。

postgresql

18
推荐指数
1
解决办法
2819
查看次数

非整数主键注意事项

语境

我正在设计一个数据库(在 PostgreSQL 9.6 上),它将存储来自分布式应用程序的数据。由于应用程序的分布式特性,SERIAL由于潜在的竞争条件,我不能使用自动递增整数 ( ) 作为我的主键。

自然的解决方案是使用 UUID,或全局唯一标识符。Postgres 带有一个内置的UUIDtype,非常适合。

我对 UUID 的问题与调试有关:它是一个非人类友好的字符串。标识符ff53e96d-5fd7-4450-bc99-111b91875ec5什么也没告诉我,而ACC-f8kJd9xKCd,虽然不能保证是唯一的,但告诉我我正在处理一个ACC对象。

从编程的角度来看,调试与几个不同对象相关的应用程序查询是很常见的。假设程序员错误地ACCORD(订单)表中搜索(帐户)对象。使用人类可读的标识符,程序员可以立即识别问题,而在使用 UUID 时,他会花一些时间找出问题所在。

我不需要 UUID 的“保证”唯一性;我确实需要一些空间来生成没有冲突的密钥,但 UUID 有点矫枉过正。此外,最坏的情况是,如果发生冲突(数据库拒绝它并且应用程序可以恢复),也不会是世界末日。因此,权衡考虑,一个更小但对人友好的标识符将是我的用例的理想解决方案。

识别应用对象

我想出的标识符具有以下格式:{domain}-{string},其中{domain}替换为对象域(帐户,订单,产品)并且{string}是随机生成的字符串。在某些情况下,{sub-domain}在随机字符串之前插入一个甚至可能是有意义的。让我们忽略的长度{domain},并{string}为保证唯一性的目的。

如果有助于索引/查询性能,格式可以具有固定大小。

问题

知道:

  • 我想要具有类似ACC-f8kJd9xKCd.
  • 这些主键将是几个表的一部分。
  • 所有这些键都将用于 6NF 数据库上的多个连接/关系。
  • 大多数表将具有中到大的大小(平均约 1M 行;最大的表具有约 100M 行)。

关于性能,存储此密钥的最佳方法是什么?

以下是四种可能的解决方案,但由于我对数据库的经验很少,我不确定哪个(如果有)是最好的。

考虑的解决方案

1. 存储为字符串 ( VARCHAR)

(Postgres 在CHAR(n) …

postgresql database-design

18
推荐指数
2
解决办法
5568
查看次数

postgres - 没有角色的 pg_dump 和 pg_restore

我正在尝试在没有接收数据库上的适当角色的情况下恢复转储。

如前所述这里也是在这里,你需要有--no-owner作为一个选项,无论是在pg_dumppg_restore或两者兼而有之。

我使用以下命令行来创建我的转储:

"C:\Program Files\PostgreSQL\9.3\bin\pg_dump.exe" --no-owner -Ft --dbname=postgresql://avo******:AV0******?@127.0.0.1:5432/BI_DB > K:\BI\backup\sort\bck_%timestamp%.tar
Run Code Online (Sandbox Code Playgroud)

恢复线如下:

"C:\Program Files\PostgreSQL\9.3\bin\pg_restore.exe" --host localhost --port 5432 --username "postgres" --dbname "BI_TEST2" --no-password  --no-owner --role=postgres --exit-on-error --verbose "D:\D\avo\backup\bck_04042017_1410.tar"
Run Code Online (Sandbox Code Playgroud)

如您所见,两者都有--no-owner选择,但最终出现以下错误:

在此处输入图片说明

最让我烦恼的是下面的日志:

pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») :
pg_restore: [programme d'archivage (db)] Erreur à partir de l'entrée TOC 2633 ; 0 0 ACL adm avo******
pg_restore: [programme d'archivage (db)] could not …
Run Code Online (Sandbox Code Playgroud)

postgresql restore postgresql-9.3 pg-dump pg-restore

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

当我收到关于“/var/run/postgresql/.s.PGSQL.5432”的错误时如何访问 Postgres?

我正在运行 Ubuntu 16。我已经安装了 Postgresql。Postgresql 曾经可以工作,但后来我重新启动了。

nmap 命令显示端口 5432 已打开。Postgres 似乎工作正常:

service postgresql status
Run Code Online (Sandbox Code Playgroud)

postgresql.service - PostgreSQL RDBMS 已加载:已加载(/lib/systemd/system/postgresql.service;已启用;供应商预设:已启用)活动:自美国东部时间周六 2017-07-29 18:42:59 起处于活动状态(退出);1min 4s ago Process: 201 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 201 (code=exited, status=0/SUCCESS)
Memory: 0B CGroup: /system.slice/postgresql.服务

我跑了这个: psql

但我得到了这个:

psql:无法连接到服务器:没有这样的文件或目录 服务器是否在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接?

上面列出的文件似乎不存在。

我如何进入 Postgresql?通常我会跑psqlsudo -i -u postgres然后psql。但是这些命令不起作用。我不断收到有关“无法连接到服务器”的错误消息。几次重新启动都没有帮助。

更新:

我运行了这个命令: dpkg -l | grep postgres

rc postgresql-9.5 9.5.6-0ubuntu0.16.04 amd64 对象关系 SQL 数据库,版本 9.5 服务器
ii postgresql-client 9.5+173 PostgreSQL 的所有前端程序(支持版本)
ii postgresql-client-9.5 9.5.7-0ubuntu0.16.04 …

postgresql linux ubuntu

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

Postgres:关系不存在错误

我使用 pg_restore 用转储文件加载我的 postgres 数据库。我与我的用户连接到我的数据库:

sudo -u arajguru psql dump

select current_user;
 current_user 
--------------
 arajguru
Run Code Online (Sandbox Code Playgroud)

现在我能够看到所有新创建的表:

dump=> \dt
               List of relations
 Schema |       Name        | Type  |  Owner   
--------+-------------------+-------+----------
 public | Approvals         | table | arajguru
 public | Approvers         | table | arajguru
 public | Conditions        | table | arajguru
 public | Entities          | table | arajguru
 public | EntityDefinitions | table | arajguru
 public | Projects          | table | arajguru
 public | Rules             | table | arajguru
 public | …
Run Code Online (Sandbox Code Playgroud)

postgresql quoted-identifier

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

postgresql 中获取和返回的元组之间的区别

我在试图找出数据库中的一些性能问题时遇到了困难。我正在使用大量在线资源来了解要监控的内容以及如何解释该信息。

从上面的,我无法找到的之间有什么区别一个明确的解释pg_stat_database.tup_returnedpg_stat_database.tup_fetched

在 pgAdmin4 中,有一个漂亮的图表叫做“Tuples out”,其中对比了这两个概念,但我不知道如何解释这些信息。在官方文档中只说:

  • tup_returned: 此数据库中查询返回的行数
  • tup_fetched: 此数据库中查询获取的行数

“获取”和“返回”究竟是什么意思?

我正在使用 postgresql 10。

postgresql performance monitoring

18
推荐指数
1
解决办法
7917
查看次数