标签: postgresql

如何恢复纯文本 postgres .backup 文件

我以普通格式从 pgAdmin 导出了一个 postgres db,因为我想搜索整个 db 文本。然后我尝试恢复数据库,但它给出了一个错误,指出存档文件不是有效的存档文件。如果可以恢复,如何恢复数据库?

postgresql pgadmin

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

如何将 MySQL 数据库转换为 PostgreSQL?

是否有任何命令行工具可以将 MySQL 数据库转换为 PostgreSQL?我还想知道是否有办法使用普通mysqldump命令转换数据库。

mysql postgresql mysqldump

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

如何使用 pgAdmin3 连接到 Ubuntu 上的远程 PostgreSQL 数据库?

我正在尝试在 Ubuntu 机器上设置 PostgreSQL 数据库。我希望能够从远程机器使用 pgAdmin3 访问它。我该如何设置?

我已经使用以下方法在 Ubuntu 上安装了 PostgreSQL 数据库:

sudo apt-get install postgresql
Run Code Online (Sandbox Code Playgroud)

在我/etc/postgresql/9.1/main/pg_hba.conf有我这一行:

host    all    all    all    password
Run Code Online (Sandbox Code Playgroud)

所以它应该接受来自所有 IPv4 地址的连接,密码应该以明文形式发送(这是出于开发原因)。

如果我运行此命令以查看正在运行的服务:

sudo netstat -tulpn
Run Code Online (Sandbox Code Playgroud)

我可以看到这些行,这表明 PostgreSQL 正在接受默认端口上的连接:

tcp    0    0    127.0.0.1:5432    0.0.0.0:*    LISTEN
3561/postgres
Run Code Online (Sandbox Code Playgroud)

当我尝试从同一本地网络上的远程计算机连接到此 PostgreSQL 服务器时,我收到此错误消息:

服务器不听

服务器不接受连接:连接库报告

无法连接到服务器:连接被拒绝 服务器是否在主机“10.0.1.7”上运行并接受端口 5432 上的 TCP/IP 连接?

我用作用postgres户名,没有密码。但我也试过用postgres作为密码。在本地服务器上,我可以使用以下方法登录:

sudo -u postgres psql postgres
Run Code Online (Sandbox Code Playgroud)

如何使用 pgAdmin3 从远程机器连接到在 Ubuntu 上运行的 PostgreSQL 数据库?

postgresql ubuntu pgadmin

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

在使用 pg_restore.exe 之前禁用约束

当我尝试pg_restore.exe从数据库执行转储文件时,它抛出了许多错误,都是一样的:

ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"

这显然是因为我在从转储文件中恢复它之前已经清空了数据库(这个文件来自生产数据库)......当然,如果一个引用的表是空的,那么没有外键约束就可以了...

有没有办法禁用所有表的约束和所有外键,在我调用之前pg_restore.exe,然后重新启用约束和外键。

在 SO 中,我发现了一些有趣的事情:将约束检查推迟到提交时间。但我不认为我可以在推迟约束后pg_restore.exe从内部调用psql.exe

还有这个帖子,可以追溯到 10 年前,建议删除然后重新添加约束。或者将 pg_class reltriggers 的值更改为 0 并且这对于约束也是可能的......但我担心这比良好的实践更像是黑客攻击......

您有什么建议,在这种情况下的最佳做法是什么?pg_dump.exe -clean标志一起使用会创建一个转储,在还原数据库时绕过约束检查吗?

postgresql foreign-key constraint restore

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

如何获得输出流的通知?

我在函数中有调试消息。这些消息是这样提出的

RAISE NOTICE 'Value of id : %', id;

我设置了我的日志文件 \o messages.txt

然后我做我需要做的 \i process.sql

当执行终止时,\o.

问题是我没有将通知引发的消息放入messages.txt。消息显示在屏幕上,但我希望它们写在 messages.txt 中

我怎么能那样做?

我尝试使用RAISE LOG...并将消息写入日志文件...这不是我想要的。

我有一个工作

plsql -f /path/to/process.sql > messages.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

但我想知道如何在 plsql 客户端上使用 \i 和 \o 将消息放入 \o 中指定的文件中

我的 cygwin 客户端是 psql (PostgreSQL) 8.2.11,服务器版本是 9.0.7

postgresql

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

如何保留未嵌套数组中元素的原始顺序?

鉴于字符串:

'我认为 PostgreSQL 很漂亮'

我想对该字符串中找到的单个单词进行操作。本质上,我有一个单独的,我可以从中获取单词详细信息,并希望在此字典上加入该字符串的未嵌套数组。

到目前为止,我有:

select word, meaning, partofspeech
from unnest(string_to_array('I think that PostgreSQL is nifty',' ')) as word
from table t
join dictionary d
on t.word = d.wordname;
Run Code Online (Sandbox Code Playgroud)

这完成了我希望做的事情的基本原理,但它没有保留原始的词序。

相关问题:
PostgreSQL unnest() with element number

postgresql parse sorting array

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

什么限制了连接数?

根据https://devcenter.heroku.com/articles/heroku-postgres-legacy-plans,连接限制为 500

根据https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server “通常,良好硬件上的 PostgreSQL 可以支持几百个连接”

这个限制的决定因素是什么?#CPU核心?内存?操作系统?

postgresql linux max-connections unix

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

有没有办法在 PostgreSQL 中显示索引的创建语句

我需要在 PostgreSQL 中重新创建一个索引膨胀的索引。因为我需要索引在创建时可用,所以我不能使用 REINDEX。我将使用新名称重新创建索引,然后删除旧名称。有什么方法可以查看用于创建索引的 SQL 语句,以便我可以复制它?

postgresql index

22
推荐指数
1
解决办法
8836
查看次数

如何在 upsert 中获取冲突行的 ID?

我有一个tag包含 2 列的表:id(uuid) 和name(text)。我现在想在表中插入一个新标签,但如果该标签已经存在,我只想获取id现有记录的 。

我以为我可以ON CONFLICT DO NOTHING结合使用RETURNING "id"

INSERT INTO
    "tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Run Code Online (Sandbox Code Playgroud)

但是,如果名称为“foo”的标签已经存在,则会返回一个空的结果集。

然后我将查询更改为使用 noopDO UPDATE子句:

INSERT INTO
    "tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
Run Code Online (Sandbox Code Playgroud)

这按预期工作,但有点令人困惑,因为我只是将名称设置为已经存在的值。

这是解决这个问题的方法还是我缺少更简单的方法?

postgresql upsert postgresql-9.5

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

Postgres:SET NOT NULL 如何比 CHECK 约束“更有效”

PostgreSQL docs for Constraints 中,它说

非空约束在功能上等同于创建检查约束CHECK (column_name IS NOT NULL),但在 PostgreSQL 中创建显式非空约束更有效。

我很好奇

  • “更高效”究竟是什么意思?
  • 使用CHECK (column_name IS NOT NULL)而不是有SET NOT NULL什么危害?

我希望能够添加一个NOT VALID CHECK约束并单独验证它(因此AccessExclusiveLock仅在添加约束时保留一小段时间,然后ShareUpdateExclusiveLock为更长的验证步骤保留a ):

ALTER TABLE table_name
  ADD CONSTRAINT column_constraint
  CHECK (column_name IS NOT NULL)
  NOT VALID;
ALTER TABLE table_name
  VALIDATE CONSTRAINT column_constraint;
Run Code Online (Sandbox Code Playgroud)

代替:

ALTER TABLE table_name
  ALTER COLUMN column_name
  SET NOT NULL;
Run Code Online (Sandbox Code Playgroud)

postgresql check-constraints postgresql-9.5

22
推荐指数
1
解决办法
2315
查看次数