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-77178

Claudio Floreani's questions

Martin Hope
Claudio Floreani
Asked: 2021-10-05 10:56:27 +0800 CST

做了纯文本备份(SQL 脚本文件格式),如何只恢复数据(假设架构有效)?

  • 0

我用来备份我的数据库pg_dump -cF p my_db > snapshot.sql。

如何仅从其中一个文件中恢复数据(假设架构有效)?我是否必须在其中发布所有 COPY 语句,还是有更直接的方法?

postgresql restore
  • 1 个回答
  • 169 Views
Martin Hope
Claudio Floreani
Asked: 2020-11-21 04:15:59 +0800 CST

varchar 按其数字字段排序

  • 0

我敢肯定这已经被问过,但由于这个问题可以用许多不同的方式来表述,所以很难找到正确的答案。

我有一个订单表,其中订单号的varchar字段的格式为 4 位数年份、破折号 (-) 和渐进数值。例如,它可能包含以下值:

SELECT number FROM orders ORDER BY number LIMIT 10;

  number  
----------
 1999-13
 2019-11
 2020-1
 2020-10
 2020-100
 2020-12
 2020-2
 2020-21
 2020-3
 2021-1

我需要按年份对该字段进行排序,然后按累进数字排序,得到以下预期结果:

  number  
----------
 1999-13
 2019-11
 2020-1
 2020-2
 2020-3
 2020-10
 2020-12
 2020-21
 2020-100
 2021-1

一个 DB 小提琴就在这里。

我的问题是:

  1. 使用 ORDER 子条款实现此目的的最简单方法是什么?
  2. 如何使用此自定义排序添加高效索引而无需修改表?

我想至少将第一个答案保留为与数据库无关(这就是为什么我没有包含特定于 db 的标签的原因),但是如果不同的 DBMS/版本可能有不同的最佳答案,那么假设 PostgreSQL 12。

postgresql order-by
  • 3 个回答
  • 654 Views
Martin Hope
Claudio Floreani
Asked: 2020-08-11 09:16:58 +0800 CST

如何在另一个表(关系)中存储对任何其他列(属性)的引用(包含一个记录)

  • -1

TL;DR:如果数据库模式应该包含所有业务逻辑,那么如何指定属性类型是对特定属性的引用,而不是特定记录(如外键的情况)?

举个例子,假设我有一个表,其中有一"Discounts"列"share"包含要应用于 column 或 table 值"cost"的百分比。"price""shipping""Items"

"Discounts"还拥有一个外键"item_id"。

我需要在"base"表"Discounts"中添加另一列来存储对 table 列之一的引用"Items",并计算该列值的百分比。
例如,给定这些值:

Discounts
share    base                 item_id
-------------------------------------
50       (item's cost)        3
25       (item's price)       1
100      (item's shipping)    2


Items
id    cost    price    shipping
-------------------------------
1     10      40       20
2     55      60       30
3     50      85       10

我希望能够计算:

  • 50 的 50%(第 3 项的成本)
  • 40 的 25%(第 1 项的价格)
  • 30 的 100%(第 2 项的运输)

列“base”不应包含引用列的数字(例如 3)或名称(例如“price”),因为每个表的名称或顺序可能会更改。特别是数据库对列(属性)顺序或行(记录/元组)顺序没有任何了解,事实上,RDB 理论断言“关系的元组没有特定的顺序,而元组反过来, 对属性没有顺序。»

相反,如果我们依赖列名,我们应该强制每个条目包含一个有效的属性名,并且每当属性名更改时,我们必须更改其记录、约束和应用程序的验证。如果名称在多个关系中被引用,那么维护数据库完整性就变得非常复杂。

这里的问题是我们没有在数据库模式中写入对属性名称的引用(就像我们添加外键时一样),而是写入数据本身,这似乎是一种非常糟糕的做法,因为它威胁到引用完整性。

如果没有与数据库无关的方法来执行此操作,则假设数据库是 PostgreSQL (v12+)。

database-design postgresql
  • 4 个回答
  • 280 Views
Martin Hope
Claudio Floreani
Asked: 2017-06-22 10:09:11 +0800 CST

加入产品和订单,以便列出每个产品以及特定买家订购的数量

  • 1

表 A 是一个列表,"products"表 B 是一个"orders"参考产品列表(使用product_id),以及购买者信息 ( buyer_nameecc) 和购买quantity的每个产品。

一个订单有很多产品和一个买家,因此当一个买家发出订单时,对于每个订购的产品以及所需的 ,将具有相同buyer_name行的行order_no插入表B。quantity

这是加入最快的两个查询"products","orders"因此对于每一"products"行我也quantity有指定买家订购的:

  • 在单个订单中(order_no指定)
  • quantity在他的所有订单中(买方发出的每个订单的总和)

为了提高效率,所有"orders"不属于指定买家(并且没有order_no为第一个查询指定)的行都应该在连接之前被排除,但是每一行都"products"应该被返回,即使产品没有从买家那里订购(quantity应该是0在这种情况下)。

更新(来自评论):

当前查询:

SELECT p.*, o.buyer_name, coalesce(o.quantity,0)
  FROM products p
         LEFT JOIN (SELECT *
                      FROM orders
                     WHERE buyer_name='Joe'
                      AND order_no=123
                   ) AS o USING(product_id)

我现在没有遇到性能问题,也不想严格调整这个特定的查询,但要确保我在总体上有效地编写查询。同样,当前的 DBMS 是 PostgreSQL 9.4.4 - 但正在寻找适用于大多数 SQL 变体的通用建议。

join
  • 1 个回答
  • 458 Views
Martin Hope
Claudio Floreani
Asked: 2015-11-28 05:53:02 +0800 CST

如何索引两个具有一对多关系但只有后者经常更新的表?

  • 1

取以下两张表:

  • table A有大约 100k 行和 50 列,并且每月仅更新两次,此更新需要多长时间不是问题(只要不超过一天,我认为这不太可能:D)。它将非常轻微地增长,每年不超过 10k 行。
  • table B有 ~25k 行和 25 列,是ofcolumn F的外键。这张表每天更新 100-1000 次,大部分时间是添加新行,所以很容易增长到几十万行。column Ctable A

Table A与 具有一对多关系table B,两者column F且column C必须不为空,有自己的索引,并且column C也是唯一的但不是 的主键table A。的每一行与table B中的一行都有唯一的对应关系table A。

这两个表每天都被查询数千次,单独或使用允许几十种不同类型查询的应用程序使用它们的关系。

  1. 为查询中涉及的每一列建立索引,并为每种类型的查询建立一个复合索引是一个好主意吗?如果没有,可能的缺点是什么?table A

  2. 因为只为最耗时的查询table B创建复合索引是个好主意吗?或者我应该为正在查询的每一列创建一个复合索引,因为这些查询可能在参数上有所不同,但在形式上却没有?table B

postgresql
  • 1 个回答
  • 1790 Views
Martin Hope
Claudio Floreani
Asked: 2015-11-15 09:41:59 +0800 CST

汇总一列中在另一列中没有匹配项的丢弃值

  • 5

比方说,我有一张表格,代表编号框内的彩色和标记项目。
每个箱子不能包含超过一件带有特定标签的物品,但具有相同标签(以及相同或不同颜色)的物品在其他箱子中可能是独一无二的。

过度简化并使用 PostgreSQL,我们可以采用下表:

CREATE TABLE items (
    label character varying,
    color character varying,
    box_number integer
);
INSERT INTO items VALUES
  ('a','red',1),
  ('b','blue',1),
  ('c','blue',1),
  ('a','red',2),
  ('c','green',2),
  ('d','blue',2),
  ('b','red',3),
  ('d','green',3);

我想知道 3 号箱子内所有物品的标签和颜色,以及可以找到具有相同标签的物品的所有箱子号。换句话说,我正在尝试:

SELECT label, boxes
FROM (
  SELECT label, array_agg(DISTINCT box_number) AS boxes
  FROM items
  GROUP BY label
) AS sub1
WHERE 3 = ANY(boxes);

但我还需要返回该color列,仅显示 3 号框内项目的颜色。

对于示例数据,输出应该是这样的:

标签 | 颜色 | 盒子
------+--------+-----
乙 | 红色 | 1,3
d | 绿色 | 2,3

这是示例的 SQL Fiddle。

postgresql aggregate
  • 3 个回答
  • 279 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