我以普通格式从 pgAdmin 导出了一个 postgres db,因为我想搜索整个 db 文本。然后我尝试恢复数据库,但它给出了一个错误,指出存档文件不是有效的存档文件。如果可以恢复,如何恢复数据库?
是否有任何命令行工具可以将 MySQL 数据库转换为 PostgreSQL?我还想知道是否有办法使用普通mysqldump命令转换数据库。
我正在尝试在 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 数据库?
当我尝试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标志一起使用会创建一个转储,在还原数据库时绕过约束检查吗?
我在函数中有调试消息。这些消息是这样提出的
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 很漂亮'
我想对该字符串中找到的单个单词进行操作。本质上,我有一个单独的,我可以从中获取单词详细信息,并希望在此字典上加入该字符串的未嵌套数组。
到目前为止,我有:
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)
这完成了我希望做的事情的基本原理,但它没有保留原始的词序。
根据https://devcenter.heroku.com/articles/heroku-postgres-legacy-plans,连接限制为 500
根据https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server “通常,良好硬件上的 PostgreSQL 可以支持几百个连接”
这个限制的决定因素是什么?#CPU核心?内存?操作系统?
我需要在 PostgreSQL 中重新创建一个索引膨胀的索引。因为我需要索引在创建时可用,所以我不能使用 REINDEX。我将使用新名称重新创建索引,然后删除旧名称。有什么方法可以查看用于创建索引的 SQL 语句,以便我可以复制它?
我有一个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 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 ×10
pgadmin ×2
array ×1
constraint ×1
foreign-key ×1
index ×1
linux ×1
mysql ×1
mysqldump ×1
parse ×1
restore ×1
sorting ×1
ubuntu ×1
unix ×1
upsert ×1