- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
短篇小说: 我有一个分区的 postgres 数据库,其中有一个表来跟踪分区和触发器。触发器需要更改分区表的约束(它们的 valid_date [daterange] 根据其他分区的 valid_date 更改)并且最好能够删除表,但这会导致错误,因为触发器链正在使用这些表'。
cannot ALTER TABLE "core_geometryrecord_8_2" because it is
being used by active queries in this session
完整问题: 我正在对我的模式和触发器架构进行详尽的解释,以备不时之需,或者有人想知道为什么我觉得需要一个“复杂”的系统,尽管这可能没有必要。
我正在重构一个大型几何数据数据库,以使其更容易、更快速地使用。旧系统具有包含相关几何图形的“几何图形表”(即美国的县)。数据实际上应该按“date_valid”和“geometrytable_id”分组。
我们决定使用对 date_valid(日期范围)和 geometrytable_id(外键)进行约束的 postgres 分区。
因为日期很敏感并且需要大量的簿记才能保持正确我第一次尝试使用触发器管理大部分数据库(我已经知道我需要一个分区表的插入触发器所以为什么不呢) .
我设计了一组触发器来管理分区列表,并在您插入或删除几何体时进行所有簿记。这是他们的工作。
如果我在链中的任何触发器中完全触及它,它就会因为我试图以任何方式更改表而生气。如果我直接插入到该表中,分区列表表的触发器可以完美地工作,但是从几何表(调用相同的触发器)中删除会翻转,即使它所做的只是一个选择(查看分区表是否为空)。插入分区几何表也会导致问题,因为我必须删除约束才能更改行的 date_valid。
必须有一种方法可以做到这一点,我就是不明白。 (我还必须使表的删除更加被动“将其标记为由 cron 作业删除”,因为我无法从源 self 要删除的表的触发器调用中删除该表。)
非常欢迎任何建议。我简直不敢相信从来没有人需要做这样的事情,所以我想我只是不知道自己在做什么 :)。
最佳答案
因此,在四处挖掘和试验之后,我弄清楚了我需要什么,并认为我会记录我的发现。
这里是有关基本 postgres 分区如何为任何感兴趣的人工作的文档页面:http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html
要知道的关键点是,对于每个分区,您必须设置约束以指定可以在分区中找到的内容(拆分 ID 以便每个表中只有 200,000 条记录只需要每个表一个约束)。这使得当您查询主表时,它会根据所有子表的约束快速检查请求。只有查询落在表约束范围内的表才会被进一步查询。如果你做对了,只有一张表被真正查询到。
至于我学到了什么:
首先,我认为根本不可能从它自己的触发器中删除一个表。我对此的解决方案只是通过一些其他机制将其标记为丢弃(例如稍后丢弃的事物表)。这个问题是它一直存在,直到 Cron 作业运行。由于从其自身的触发器更改表也是不可能的,因此该表仍将是一个分区,只是标记为稍后删除。如果您的分区正确,这可能不会导致任何问题。在我的例子中,可能有两个分区重叠(一个标记为要删除,一个应该存在)。这样做的副作用是,对于指定可能在这些表中的任何一个中的事物的查询,将同时命中两个表。在 Cron 作业完成之前,这对我来说很好,所以我很好,但有些情况可能无法解决此问题。
其次,我意识到正在更改它们未写入的表的插入工作正常,但触发相同触发器链的删除和更新失败,因为 session 正在使用这些表。我认为这是疯狂的事情,但真正的问题是我是根据日期和外键进行分区的,但根据记录的 ID 进行了删除。这导致 postgres 检查所有表的所有约束,这使它无法了解要使用哪个表,因此它只检查了所有表。为了使删除工作正常进行,我所要做的就是指定我分区的信息,这样它就知道要查找哪个表,而不是扫描整组表来查找 id。
TLDR 如果您在任意(一组)列上对 postgres 表进行分区,请确保通过提供您在其上进行分区的列来删除或更新记录,以便 postgres 可以知道哪个表查看,而不必扫描整个集合。
关于postgresql - 带触发器的 Postgres 分区管理。发行变更表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15961183/
是一种在 Neo4j 分区之间进行物理分离的方法吗? 这意味着以下查询将转到 node1: Match (a:User:Facebook) 虽然此查询将转到另一个节点(可能托管在 docker 上)
我尝试在我的 SQL 服务器上使用分区函数对我的一个大表进行分区,但我收到一条错误消息 “只能在SQL Server企业版中创建分区功能。只有SQL Server企业版支持分区。” 所以我想知道没有企
在hadoop文件系统中,我有两个文件,分别是X和Y。通常,hadoop制作的文件X和Y的大小为64 MB。是否可以强制hadoop划分两个文件,以便从X的32 MB和Y的32 MB中创建一个64 M
据我了解,如果我们有一个主键,则使用该键对数据进行分区并将其存储在节点中(例如使用随机分区器)。 现在我不确定的是,如果我有多个键(又名复合键),是用于分区数据的键的组合还是它将是第一个主键? 例如,
我正在向我的 SSAS 多维数据集添加分区,我想知道是否有多个分区可以保留在下面?多少太多了,最佳实践限制是 20 还是 200?有没有人可以分享任何真实世界的知识? 最佳答案 这是 another
我有一个包含大约 200 万条记录的大表,我想对其进行分区。 我将 id 列设置为 PRIMARY AUTO_INCRMENT int (并且它必须始终是唯一的)。我有一列“theyear”int(4
我正在做 mysql 列表分区。我的表数据如下 ---------------------------------------- id | unique_token | city | student_
我有一个表,我们每天在其中插入大约 2000 万个条目(没有任何限制的盲插入)。我们有两个外键,其中一个是对包含大约 1000 万个条目的表的引用 ID。 我打算删除此表中超过一个月的所有数据,因为不
我想在一款足球奇幻游戏中尝试使用 MySQL Partitioning,该游戏的用户分布在联赛中,每个联赛都有一个用户可以买卖球员的市场。当很多用户同时玩时,我在这张表中遇到了一些僵局(在撰写本文时大
我是 jQuery 的新手,想知道是否可以获取一些变量并将它们的除法作为 CSS 宽度。到目前为止我在这里: var x = $(".some-container").length; var y =
所以我正在做家庭作业,我需要为分区、斯特林数(第一类和第二类)和第一类的切比雪夫多项式创建递归函数。我的程序应该能够让用户输入一个正整数 n,然后创建名为 Partitions.txt、Stirlin
我在数据框中有一列,其中包含大约 1,4M 行聊天对话,其中每个单元格中的一般格式为 (1): “名称代理 : 对话” 但是,并非列中的所有单元格都采用这种格式。有些单元格只是 (2): “对话” 我
我在尝试隐藏 a 时遇到了一些问题,直到用户单击某个元素为止。 HTML 看起来像: BRAND item 1 item 2 item 3
一.为什么kafka要做分区? 因为当一台机器有可能扛不住(类比:就像redis集群中的redis-cluster一样,一个master抗不住写,那么就多个master去抗写)
我有一些销售数据,我需要发送存储在单独表中的可用槽中的数量。 销售数据示例: id数量112131415369 create table sales (id serial primary key, q
我计划设置多个节点以使用 glusterfs 创建分布式复制卷 我使用主(也是唯一)分区上的目录在两个节点上创建了一个 gluster 复制卷。 gluster volume create vol_d
我正在尝试使用 sum() over (partition by) 但在总和中过滤。我的用例是将每个产品的 12 个月累计到一个月的条目,因此: ITEM MONTH SALES Item
是否可以创建多个 Enumerators出单Enumerator ? 我正在寻找的相当于 List.partition返回 (List[A], List[A]) ,比如 List().partitio
我正在创建一个基于 x86 的非常简单的 Yocto 图像。 我希望/文件系统是只读的,所以我设置了 IMAGE_FEATURES_append = " read-only-rootfs " 在原件的
是否可以使用一次 collect 调用来创建 2 个新列表?如果没有,我该如何使用分区来做到这一点? 最佳答案 collect(在TraversableLike上定义并在所有子类中可用)与集合和Par
我是一名优秀的程序员,十分优秀!