如何从不同的架构将公共数据插入到临时表中?

如何从不同的架构将公共数据插入到临时表中?,第1张

如何从不同的架构将公共数据插入到临时表中?

首先,您可以创建一个

VIEW
以提供此功能:

CREATE VIEW orders ASSELECt '1'::int AS source -- or any other tag to identify source      ,"OrderNumber"::text AS order_nr      ,"InvoiceNumber"     AS tansaction_id -- no cast .. is int already      ,"OrderDate" AT TIME ZONE 'UTC' AS purchase_date -- !! see explanationFROM   tbl_neweggUNIOn  ALL  -- not UNIOn!SELECt 2       "amazonOrderId"      ,"merchant-order-id"      ,"purchase-date"FROM   tbl_amazon;

您可以像查询其他任何表一样查询此视图

SELECt * FROM orders WHERe order_nr = 123 AND source = 2;
  • source
    如果
    order_nr
    不是唯一的,则是必需的。您还如何保证不同来源的唯一订单号?

  • timestamp without time zone
    在全球范围内,A 是模棱两可的。它仅与时区有关。如果您将
    timestamp
    和混合使用
    timestamptz
    ,则需要将其
    timestamp
    AT TIME ZONE
    结构放置在特定的时区以使其正常工作。有关更多说明,请阅读此相关答案。

我使用UTC作为时区,您可能需要提供其他时间。一个简单的转换

"OrderDate"::timestamptz
将假定您当前的时区。
AT TIMEZONE
应用于中的
timestamp
结果
timestamptz
。这就是为什么我没有添加其他演员表的原因。

  • 虽然你 可以 ,我建议不要在PostgreSQL中使用驼峰标识符 以往 。避免了多种可能的混乱。请注意我提供的小写字母标识符(现在没有多余的双引号)。

  • 请勿将

    varchar(25)
    用作类型
    order_nr
    。只要使用
    text
    无任意长度调节剂,如果它必须是一个字符串。如果所有订单号仅由数字组成,
    integer
    或者
    bigint
    会更快。

性能

快速实现此目标的一种方法是实现视图。即,将结果写入(临时)表中:

CREATE TEMP TABLE tmp_orders ASSELECt * FROM orders;ANALYZE tmp_orders; -- temp tables are not auto-analyzed!ALTER TABLE tmp_ordersADD constraint orders_pk PRIMARY KEY (order_nr, source);

需要 一个索引。在我的示例中,主键约束自动提供索引。

如果表很大,则 创建临时表 之前, 请确保您有足够的 临时缓冲区 在RAM中进行处理。否则,它实际上会使您减速。 __

SET temp_buffers = 1000MB;

必须是会话中对临时对象的第一次调用。请勿仅针对您的会话将其设置为全局较高。无论如何,临时表会在会话结束时自动删除。

要估算您需要多少RAM,请一次创建表格并进行以下测量:

SELECT pg_size_pretty(pg_total_relation_size('tmp_orders'));

在dba.SE上的相关问题下,有关对象大小的更多信息。

仅当您必须在一个会话中处理多个查询时,才支付所有开销。对于其他用例,还有其他解决方案。如果您在查询时知道源表,则将查询直接定向到源表会更快。如果您不这样做,我会再次质疑您的独特性

order_nr
。如果确实可以保证唯一,则可以删除
source
我介绍的列。

对于仅一个或几个查询,使用视图而不是物化视图可能会更快。

我还要考虑一个 plpgsql函数 ,该 函数
一个在另一个表之后查询直到找到记录。考虑到开销,对于一些查询可能会便宜一些。当然,每个表都需要索引。

另外,如果您坚持

text
或坚持自己的意愿
varchar
,请
order_nr
考虑
COLLATE"C"
一下。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5056643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存