标签: postgresql

当源数据库以 UTF8 编码时,如何解决还原时出现 UTF8 无效字节序列复制错误?

我的任务是将 PostgreSQL 8.2.x 数据库迁移到另一台服务器。为此,我使用 pgAdmin 1.12.2(顺便说一下,在 Ubuntu 11.04 上)并使用自定义/压缩格式 (.backup) 和 UTF8 编码的备份和还原。

原始数据库是 UTF8,如下所示:

-- Database: favela

-- DROP DATABASE favela;

CREATE DATABASE favela
  WITH OWNER = favela
       ENCODING = 'UTF8'
       TABLESPACE = favela
       CONNECTION LIMIT = -1;
Run Code Online (Sandbox Code Playgroud)

我正在目标服务器上完全像这样创建这个数据库。但是当我使用“恢复”选项从 .backup 文件恢复数据库时,它给了我一些以下错误:

pg_restore: restoring data for table "arena"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2173; 0 35500 TABLE DATA arena favela
pg_restore: [archiver (db)] COPY failed: ERROR:  invalid byte sequence for encoding …
Run Code Online (Sandbox Code Playgroud)

postgresql migration pgadmin

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

理解 EXPLAIN 命令的时间格式 - Postgres

当我对给定查询运行 EXPLAIN ANALYZE 命令时,我很难解释输出的时间值。例如(实际时间=8163.890..8163.893)。内部小数是否代表重复字符?抱歉,这可能是一个菜鸟问题,但我想确保我正确解释了结果。

   ->  GroupAggregate  (cost=2928781.21..2929243.02 rows=1 width=27712) (actual time=8163.890..8163.893 rows=1 loops=1)
Run Code Online (Sandbox Code Playgroud)

postgresql explain

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

如何将现有索引提升为 PostgreSQL 中的主键

我知道如何在表中创建主键,但如何将现有索引设为主键?我正在尝试将现有表从一个数据库复制到另一个数据库。当我显示表格时,底部的索引是这种形式:

"my_index" PRIMARY KEY, btree (column1, column2)
Run Code Online (Sandbox Code Playgroud)

我已经创建了索引:

CREATE INDEX my_index ON my_table (column1, column2)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使它成为主键......

更新:我的服务器版本是 8.3.3

postgresql index primary-key

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

列出所有表的主键 - Postgresql

是否有一个查询可以做到这一点?

我发现了一些可以对一张表执行此操作的查询,但我无法对其进行修改,因此我可以看到:

tablename | column | type
Run Code Online (Sandbox Code Playgroud)

schema postgresql

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

如何检查 PostgreSQL 服务器的 SSL 证书?

假设有一个 PostgreSQL 服务器正在运行并且它启用了 SSL。使用“标准”Linux 和 PostgreSQL 工具,如何检查其 SSL 证书?

我希望输出类似于您从 running 中获得的输出openssl x509 -text ...。而且我希望有一个单行或两行的命令行答案,这样我就不必求助于运行数据包嗅探器了。

我无权访问 PostgreSQL 服务器,因此无法直接查看其配置文件。

我没有超级用户登录,所以我无法获得ssl_cert_file设置的值,然后pg_read_file就可以了。

使用openssl s_client -connect ...不起作用,因为 PostgreSQL 似乎不想立即进行 SSL 握手。

通过快速查看psql文档,我找不到使其在启动时显示该信息的命令行参数。(虽然它确实向我展示了某些密码信息。)

postgresql ssl postgresql-9.4

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

varchar(n) 的开销是多少?

我想从Postgres 文档中询问这个片段关于varchar(n)类型的含义:

短字符串(最多 126 个字节)的存储要求是 1 个字节加上实际字符串,其中包括字符情况下的空格填充。较长的字符串有 4 个字节的开销而不是 1 个字节。

假设我有一个varchar(255)字段。现在,以下声明:

  • 如果该字段包含 10 个字节的字符串,则开销为 1 个字节。因此该字符串将使用 11 个字节。
  • 如果该字段使用 140 个字节保存字符串,则开销为 4 个字节。因此该字符串将使用 144 个字节。

上面的那些说法是真的吗?这里有人理解文档相同的方式,我不过这里有人指出的开销总是4个字节在这里

postgresql varchar database-internals

19
推荐指数
1
解决办法
9984
查看次数

在只接收 INSERT 的表上运行 VACUUM 是否值得?

在 2015 年的 re:Invent 演讲中,AWS 提到真空不仅应该在更新或删除之后运行,而且还应该在插入之后运行。这是谈话的相关部分:

http://www.youtube.com/watch?v=tZXp19q8RFo&t=16m2s

据说即使块只收到插入,也必须对块进行一些清理,并且可以在第一次选择块时(减慢读取速度)或在真空期间进行清理。这是真的吗?如果是这样,究竟必须进行哪些清理工作?

postgresql performance vacuum postgresql-performance

19
推荐指数
1
解决办法
2817
查看次数

pgAdmin 首选项中的二进制路径

我安装了 PostgreSQL,因为我需要恢复.backup我收到的一个大文件以上传到另一个平台(它有 3800 万行,显然太大了,无法以任何其他方式导出)。当我尝试在 pgAdmin 4 中“恢复”时,我收到以下消息:

请在首选项对话框中配置 PostgreSQL 二进制路径。

这只是 PostgreSQL 文件夹的路径吗?我在 PostgreSQL 站点上找不到关于此的文档。我能找到的只有:

使用二进制路径节点中的字段指定 PostgreSQL 二进制实用程序和 EnterpriseDB Postgres Advanced Server 二进制实用程序的路径。

除了通过 pgAdmin 之外,还有其他更简单的方法来恢复数据库吗?

postgresql pgadmin restore pgadmin-4

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

如何在生成的表定义未知的情况下生成旋转的 CROSS JOIN?

给定两个带有名称和值的未定义行数的表,我将如何显示CROSS JOIN函数对其值的透视。

CREATE TEMP TABLE foo AS
SELECT x::text AS name, x::int
FROM generate_series(1,10) AS t(x);

CREATE TEMP TABLE bar AS
SELECT x::text AS name, x::int
FROM generate_series(1,5) AS t(x);
Run Code Online (Sandbox Code Playgroud)

例如,如果该函数是乘法,我将如何生成如下所示的(乘法)表,

1..12的常用乘法表

所有这些(arg1,arg2,result)行都可以用

SELECT foo.name AS arg1, bar.name AS arg2, foo.x*bar.x AS result
FROM foo
CROSS JOIN bar; 
Run Code Online (Sandbox Code Playgroud)

所以这只是一个演示问题,我希望这也适用于自定义名称——该名称不仅仅是CAST文本的参数,而是设置在表格中,

CREATE TEMP TABLE foo AS
SELECT chr(x+64) AS name, x::int
FROM generate_series(1,10) AS t(x);

CREATE TEMP TABLE bar AS
SELECT …
Run Code Online (Sandbox Code Playgroud)

postgresql pivot dynamic-sql

19
推荐指数
2
解决办法
6629
查看次数

PostgreSQL:生成的列

PostgreSQL 是否支持生成的列?也称为虚拟列。我不是在谈论IDENTITY

我找不到有关此卓越功能的任何信息,但我知道它在 SQL Server 以及最新版本的 MariaDB 和 MySQL 中可用。

SQL:2003标准中提到了该功能,并且在 2006 年左右在 PostgreSQL 论坛上进行了一些讨论,但我找不到关于此事的任何实质性内容。

有一些关于 SO 的讨论,但它现在已经很老了,所以它很可能已经过时了。

postgresql computed-column

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