标签: postgresql

Postgres uuid:用作主键,或作为 SERIAL 的补充 - 对于断开连接的应用程序 -

对于带有 postgres 9 的新 SASS 应用程序,它将支持断开连接的客户端。

客户端不会使用常规 ID,而只会使用 UUID。客户端将在 iOS、html5/python 上运行,稍后可能还会在其他平台上运行。客户端数据库将是sqlite。

每个客户都将使用自己的模式,因此希望不会存在太大的表,但仍然因为这是用于发票和财务内容的,所以会生成大量数据,并且因为云托管成本与 CPU/RAM 超额费用相关从一开始就拥有最佳性能是有意义的(加上更快的响应时间对最终用户来说是有好处的)。

因此,我需要在客户端中使用 UUID 支持创建新记录。现在,我正在争论是否仅将 UUID 用于同步部分,并使用常规 ID 用于 JOINS 和主键。

但是,我也觉得这是重复,如果我要存储 uuid 为什么不在服务器中根本不删除 int 键,但担心这是否会在以后给我带来性能问题以及我需要使用哪种索引类型(btree 将是够好了?)

postgresql sqlite

5
推荐指数
1
解决办法
6153
查看次数

转储带有外键和引用数据的 PostgreSQL 架构

PostgreSQL 官方文档指出pg_dump可以使用该--schema=SCHEMA选项有选择地转储给定的模式。

然而,根据相同的文档(请阅读注释--schema=SCHEMA), 所选模式之外的对象的外键包含在转储中,但不包含它们引用的表。

话虽如此,我想知道如何转储给定的模式,使其包含所有需要的表,无论它们所在的模式如何,并且这是以安全/易于恢复转储的方式完成的。

此外,是否有可用的工具可以做到这一点?

谢谢

schema postgresql foreign-key dump

5
推荐指数
1
解决办法
4254
查看次数

通过 cronjob 执行 pg_dumpall 时如何解决错误代码 127?

我有这个简单的脚本来备份 postgres 中的所有数据库

    pg_dumpall -U pg_user > /tmp/tmp.txt
    DUMP_STATUS=$?
    echo "Dump status: $DUMP_STATUS" > /tmp/status.txt
Run Code Online (Sandbox Code Playgroud)

从命令行执行脚本时,转储状态为 0,并且正确创建了 tmp.txt 文件。

但是,如果我在 crontab 中将该脚本作为 cronjob 执行,则我的 tmp.txt 为空(所有数据库的转储失败),并且我的 status.txt 文件包含转储状态 127。

我注意到的一个奇怪的行为是 pg_dumpall 会将信息通过管道传输到文件中,但也会将其打印在终端上。我认为这种行为可能是问题的原因。

知道如何解决这个问题吗?

我正在运行 FreeBSD:

    > uname -mrs  
    FreeBSD 9.1-PRERELEASE amd64

    > psql -V
    psql (PostgreSQL) 9.1.7
    contains support for command-line editing
Run Code Online (Sandbox Code Playgroud)

postgresql backup

5
推荐指数
1
解决办法
6531
查看次数

PostgresSQL:在 SELECT 语句中获取 UDT 的单个属性

我在 PostgreSQL 9.2 数据库中创建了一个用户定义类型,并尝试在SELECT语句中仅获取 UDT 的一个属性。但是,我似乎无法让我的代码工作。

创建类型和表:

CREATE TYPE  ttp AS (f1 int, f2 int);
CREATE TABLE tbl (ctyp ttp);
Run Code Online (Sandbox Code Playgroud)

SELECT声明:

-- does not work
SELECT ctyp.f1 FROM tbl
SELECT ctyp(f1) FROM testtable
Run Code Online (Sandbox Code Playgroud)

两次我都收到错误。是否可以访问 a 中 UDT 中定义的单个属性SELECT

postgresql select composite-types user-defined-type

5
推荐指数
1
解决办法
980
查看次数

PostgreSQL 中的加密

PostgreSQL 是否支持事务级和数据库表级的数据加密功能?如果是,怎么办?

Oracle 通过数据库和网络加密来提供此功能。Oracle 提供表、表空间级别的加密。PostgreSQL 也支持这个吗?

postgresql encryption

5
推荐指数
1
解决办法
2991
查看次数

移动 postgresql 数据目录

我按照以下步骤移动了 postgresql 的数据目录:

  1. 停止 postgres
  2. cp -a 源数据目录 目标数据目录
  3. 导出 PGDATA=destination_data_directory
  4. 将 postgresql.conf 中的数据目录更改为destination_data_directory
  5. pg_ctl开始

但是当我运行:“pg_ctl start”时,出现以下错误。有人可以帮我找出错误吗?

服务器启动 postgres@Server:/usr/lib/postgresql/9.1/bin$ postgres 无法访问服务器配置文件“/home/destination_data_directory/postgresql.conf”:没有这样的文件或目录

postgresql linux ubuntu

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

错误:无法读取关系库/Y/Z 的块 X

我们的 PostgreSQL 服务器(版本 8.4)存在一些严重问题。我们的 Web 应用程序使用 jdbc 连接到 PostgreSQL 服务器。突然我们的 Web 应用程序无法连接到 PostgreSQL 服务器。我们得到 PSQLException:管道损坏。因此,我尝试通过 pg_admin 连接。这有效,但我收到这样的错误:

错误:无法读取关系库/16390/2663 的块 32570:仅读取 8192 字节中的 0 个

我尝试进行转储来备份数据,但这也不起作用:(查看侧面底部的编辑)

pg_dump:SQL 命令失败

pg_dump:来自服务器的错误消息:错误:无法读取关系库/16390/2663 的块 32570:只读 8192 字节中的 0

pg_dump:命令是:在访问共享模式下锁定表 public.results_233_top100_disease_state_karyotype

我试图获取一些信息

SELECT oid, relname FROM pg_class WHERE oid=2663
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

第2663章 “pg_class_relname_nsp_index”

在我收集一些信息的过程中,我读到,重新创建该特定索引可能会有所帮助。因此使用以下命令重新索引它:

REINDEX INDEX pg_class_relname_nsp_index
Run Code Online (Sandbox Code Playgroud)

这根本没有帮助,现在我很无助。有人知道我能做什么吗?另一点是,我们每周进行备份。是否可以/var/lib/postgresql/8.4./main使用备份中的数据覆盖数据文件夹?

编辑:我通过重新索引有错误的表解决了问题。现在我又收到另一个错误:

pg_dump:SQL 命令失败
pg_dump:来自服务器的错误消息:错误:关系 base/16390/16398 的块 1047 中的页头无效
pg_dump:命令是:COPY public.data_1 (sampleid, feature, value) TO stdout;

postgresql postgresql-8.4

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

更改 pg_dump 明文输出中 NULL 的表示

我正在尝试将大型 Postgres DB (500 GB) 转换为 SQL Server 2012。在研究了一些第三方工具并对功能、性能或两者都感到失望后,我开始寻求简单的 pg_dump/批量导入解决方案。事情看起来很有希望,直到我意识到 pg_dump 将明文中的 NULL 表示为“\N”,这会导致批量插入在类型不匹配的情况下出现错误。即使我要自动执行 pg_dump 过程来为每个表生成一个文件,所涉及的一些单独的表也非常大(20-50 GB),并且使用 Linux 中的快速文件编辑选项执行全面的查找替换,或者Perl 脚本给导入/导出所需的时间增加了太多开销。

我希望有一种方法可以修改我不知道的 pg_dump 输出中的 NULL 表示,或者如果失败,可以在工具或策略方面获得一些关于此过程的替代方法的建议。在此先感谢您的帮助。

postgresql sql-server type-conversion

5
推荐指数
1
解决办法
3677
查看次数

将 .csv 值匹配为 INT。如果 .csv 中某个组中的一个值与另一组中的一个值匹配,则合并字符串

这里我们有两组数字。问题是我无法弄清楚如何从数字的输入到输出(下面的 DDL 和 DML 以及这里的小提琴)。

current_data
1,2,3
1,4
1,5,7
8,9,10
10,11,15

expected_outcome
1,2,3,4,5,7
8,9,10,11,15
Run Code Online (Sandbox Code Playgroud)

我们只是尝试根据单个数字是否与任何其他组匹配来匹配一组数字。然后合并所有这些组。

例如。

如果我们有:

('1,2,3'),
('1,4'),
('1,5,7')
Run Code Online (Sandbox Code Playgroud)

我们想要:

(1,2,3,4,5,7)
Run Code Online (Sandbox Code Playgroud)

我们将它们合并为 PostgreSQL 中的一行。

或(另一个例子):

('8,9,10'), 
('10,11,15')
Run Code Online (Sandbox Code Playgroud)

所需的输出:

(8,9,10,11,15)
Run Code Online (Sandbox Code Playgroud)

查询将对这些数字进行分组,因为它们的共同点是数字 10。但它不会与(1,2,3,4,5,7)不共享数字的前一行(即)分组。

当我们将这些组放在一张表中时。如果他们在每一组中至少有一个匹配的号码,他们才会分组在一起。

======== DDL 和 DML ============

create table current (current_data text not null);
create table expected_output (expected_outcome text not null);

insert into current (current_data) values ('1,2,3'),('1,4'),('1,5,7'),('8,9,10'), ('10,11,15');
insert into expected_output (expected_outcome) values ('1,2,3,4,5,7'),('8,9,10,11,15');
Run Code Online (Sandbox Code Playgroud)

postgresql array string string-splitting string-searching

5
推荐指数
1
解决办法
94
查看次数

降低 PostgreSQL 中的时间/时间戳精度是否有性能或存储空间优势?

PostgreSQL 允许time/timestamp指定精度:

time, timestamp, 并interval接受一个可选的精度值p,该值指定保留在秒字段中的小数位数。默认情况下,没有明确的精度限制。的允许范围p是 0 到 6。

来自PostgreSQL 13 文档

然而它指出的存储空间是一个常数8字节(timestamptime without timezone为)和12字节time with timezone的无论p

在不需要额外精度的情况下——比如毫秒(p = 3)或秒(p=0)就足够了——显式降低精度是否有优势?

postgresql performance timestamp disk-space

5
推荐指数
1
解决办法
468
查看次数