AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-18639

amphibient's questions

Martin Hope
amphibient
Asked: 2018-11-15 08:48:15 +0800 CST

将 Postgres 服务器从 Windows 迁移到 Linux

  • 1

简单的问题:我想将 Postgres 服务器的所有数据、模式、角色以及所有内容从 Windows 迁移到 Linux。

我可以只复制%PGDATA%Windows 中服务器指向 Linux 的目录的内容,并在那里启动服务器,将 PGDATA 参数/变量指向该目录吗?换句话说,数据文件平台是否独立于从一个操作系统移植到另一个操作系统?

我还开发了一个用于克隆 PG 数据库、模式+数据的脚本,但出于各种原因,我更愿意将数据文件放在 USB 驱动器上并完成它。

postgresql replication
  • 2 个回答
  • 2214 Views
Martin Hope
amphibient
Asked: 2016-12-15 08:41:22 +0800 CST

在 Postgres 中创建 FK 时删除可能的孤儿

  • 1

我正在研究一个复制模式和数据的脚本。我首先创建所有结构,除了foreign keys从源中读取它之后system tables,然后复制数据,然后创建 FK,以便在我复制父级后将一个可能的孤儿插入到子表中(当我运行脚本时) ),即使 FK 创建由于孤立数据而失败,我仍然可以获得基本架构和数据。

我的下一步是做一些事情,比如将try/catchcreate FK 语句包裹起来,如果它失败,删除导致它的孤立数据。这样做会有些复杂,因为我必须提取所有引用键并组装我自己的删除语句(我目前不这样做,因为 PG 系统表提供了一个REFERENCES可以连接的就绪语句)。

但我想知道是否有一种方法可以为ALTER TABLE x ADD CONSTRAINT fk_y FOREIGN KEY ... DELETE ANY WOULD-BE ORPHANS我节省这一步。

所以如果我的父表是:

 parent_id     | parent_name
---------------------------------
 1             | Joe
 2             | Mary

孩子是:

child_id      | child_name     | parent_parent_id
--------------------------------------------------
 11           | Jimmy          | 1
 21           | Joey           | 2
 31           | Jeff           | 3

'Jeff' 将在强制引用完整性之前被删除,因为他的父级和他在源父级复制到目标之后被引入源。然后可以根据一致的数据创建 FK。


澄清(来自评论/聊天讨论):

您是否在单个事务中读取数据?

  • 我不使用单笔交易,因为它太大了。我按表分解检索到的数据,并按表段(5000 或 10000 行的批次)对一些大表进行分解。

  • 这本质上是一个 ETL,它从 DB 中生成一个“邪恶的双胞胎”。希望这是有道理的。

  • 平均而言,我的环境中的数据库副本需要 20 分钟(对于小型数据库)到 1.5-2 小时(对于较大的数据库),有些表有数百万行。我在 Python 脚本的内存中逐块加载

pg_dump或呢pg_basebackup?

  • 我的应用程序做了一些其他pg_dump不做的事情,例如更好的日志记录。此外,pg_dump 期望在源和目标以及许多其他问题上使用相同的用户。我试过了,不喜欢。我更喜欢我的工具,我想解决这个仅偶尔发生的小问题。
postgresql restore
  • 2 个回答
  • 2121 Views
Martin Hope
amphibient
Asked: 2016-10-18 09:07:22 +0800 CST

强制约束名称的唯一性

  • 0

我只是注意到 PostgreSQL 允许在数据库中重复外键(可能还有其他约束)名称,只要它们在不同的表上即可。

因此,如果父表是Foo并且它有两个子表BarX并且BarY,则可以命名两个表上的外键FK_fooid。

IMO,这是一个糟糕的设计,因为

select * from information_schema.referential_constraints
where constraint_name = 'FK_fooid' 

将返回两个相同的行,无法区分哪一个对应于哪个表/键。

有没有办法在 Postgres 中禁用跨数据库的约束名称重复并强制每个约束具有唯一名称?

postgresql
  • 1 个回答
  • 1241 Views
Martin Hope
amphibient
Asked: 2016-10-13 12:27:36 +0800 CST

如何在后台在 Windows 命令行上(重新)启动 Postgres?

  • 6

我的本地 Postgres 服务器配置为在计算机启动时启动。我刚刚更改了postgresql.conf文件,不得不重新启动服务器。我做了:

pg_ctl restart

从在下一个命令提示符处启动服务器的命令行 BUT:

pg_ctl:旧的服务器进程(PID:2968)似乎消失了
无论如何启动服务器
服务器启动

D:\>2016-10-12 16:24:48 EDT LOG:将日志输出重定向到日志收集器进程
2016-10-12 16:24:48 EDT 提示:未来的日志输出将出现在目录“pg_log”中。

如果我ctrl-c退出它或关闭命令窗口,则会关闭服务器。如何pg_ctl在后台使用(重新)启动服务器,模拟默认情况下的工作方式(作为 Windows 服务)?

postgresql startup
  • 1 个回答
  • 45965 Views
Martin Hope
amphibient
Asked: 2014-05-08 08:00:33 +0800 CST

索引可以仅引用一个或可能值的子集吗?

  • 1

我正在使用 Postgres。该表看起来像这样:

tran_id SERIAL PRIMARY KEY,
account_id integer NOT NULL CONSTRAINT fk_account_id REFERENCES base.account(account_id) ON DELETE CASCADE,
tran_type base.my_enum not null,
tran_note varchar(64) not null,
process_id integer not null,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP

我感兴趣的是能够快速找到只有process_id0 的行。该值意味着该行正在等待某种处理,非 0 行基本上是我不想存档的旧日志,因为应用程序也需要查找特定帐户的交易数量。因此将已处理和待处理的数据放在同一个表中很方便。 但是,我对能够快速找到该字段不是 0 的行不感兴趣,并且我不想使用资源来索引这些其他值。

在一个实现中,该表有近 20 万个账户,每个账户平均约 200 笔交易,因此约 4000 万行,或多或少。在任何给定时间,可能有几十个新交易要处理,即WHERE process_id = 0. 处理后, 将process_id更新为 0 以外的值。

我永远不会搜索process_id除 0 以外的其他值。因此,我有兴趣拥有一个仅指向该值为 0 的行的索引,而不必理会其他值,以便索引更紧凑、更快。这可能吗?

postgresql index
  • 1 个回答
  • 63 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve