我的任务是将 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) 当我对给定查询运行 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) 我知道如何在表中创建主键,但如何将现有索引设为主键?我正在尝试将现有表从一个数据库复制到另一个数据库。当我显示表格时,底部的索引是这种形式:
"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
是否有一个查询可以做到这一点?
我发现了一些可以对一张表执行此操作的查询,但我无法对其进行修改,因此我可以看到:
tablename | column | type
Run Code Online (Sandbox Code Playgroud) 假设有一个 PostgreSQL 服务器正在运行并且它启用了 SSL。使用“标准”Linux 和 PostgreSQL 工具,如何检查其 SSL 证书?
我希望输出类似于您从 running 中获得的输出openssl x509 -text ...。而且我希望有一个单行或两行的命令行答案,这样我就不必求助于运行数据包嗅探器了。
我无权访问 PostgreSQL 服务器,因此无法直接查看其配置文件。
我没有超级用户登录,所以我无法获得ssl_cert_file设置的值,然后pg_read_file就可以了。
使用openssl s_client -connect ...不起作用,因为 PostgreSQL 似乎不想立即进行 SSL 握手。
通过快速查看psql文档,我找不到使其在启动时显示该信息的命令行参数。(虽然它确实向我展示了某些密码信息。)
我想从Postgres 文档中询问这个片段关于varchar(n)类型的含义:
短字符串(最多 126 个字节)的存储要求是 1 个字节加上实际字符串,其中包括字符情况下的空格填充。较长的字符串有 4 个字节的开销而不是 1 个字节。
假设我有一个varchar(255)字段。现在,以下声明:
在 2015 年的 re:Invent 演讲中,AWS 提到真空不仅应该在更新或删除之后运行,而且还应该在插入之后运行。这是谈话的相关部分:
http://www.youtube.com/watch?v=tZXp19q8RFo&t=16m2s
据说即使块只收到插入,也必须对块进行一些清理,并且可以在第一次选择块时(减慢读取速度)或在真空期间进行清理。这是真的吗?如果是这样,究竟必须进行哪些清理工作?
我安装了 PostgreSQL,因为我需要恢复.backup我收到的一个大文件以上传到另一个平台(它有 3800 万行,显然太大了,无法以任何其他方式导出)。当我尝试在 pgAdmin 4 中“恢复”时,我收到以下消息:
请在首选项对话框中配置 PostgreSQL 二进制路径。
这只是 PostgreSQL 文件夹的路径吗?我在 PostgreSQL 站点上找不到关于此的文档。我能找到的只有:
使用二进制路径节点中的字段指定 PostgreSQL 二进制实用程序和 EnterpriseDB Postgres Advanced Server 二进制实用程序的路径。
除了通过 pgAdmin 之外,还有其他更简单的方法来恢复数据库吗?
给定两个带有名称和值的未定义行数的表,我将如何显示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)
例如,如果该函数是乘法,我将如何生成如下所示的(乘法)表,
所有这些(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 ×10
pgadmin ×2
dynamic-sql ×1
explain ×1
index ×1
migration ×1
performance ×1
pgadmin-4 ×1
pivot ×1
primary-key ×1
restore ×1
schema ×1
ssl ×1
vacuum ×1
varchar ×1