标签: postgresql

我可以让一张表成为另一个表的“别名”或“符号链接”吗?

我有两个结构相同的表,A 和 B。编写了某个应用程序,以便它始终将相同的数据写入两个表。

在与同事讨论节省驱动器空间的潜力后,我想知道 mysql 或 postgresql 是否能够在表上创建另一个表的“别名”或“符号链接”。

我希望行为与软文件符号链接的行为非常相似;从符号链接本身或其目标读取将产生相同的输出,写入任一将更新目标。

mysql postgresql

10
推荐指数
2
解决办法
8075
查看次数

Postgres - 创建带有外键约束的表太慢

我有一个名为“Account”的表,它是一个经常使用的表,有 17 列,有超过 300,000 行。我正在尝试创建一个新表“NewTable”,它对“Account”表具有外键约束。

我的 CREATE TABLE 语句如下所示:

CREATE TABLE "NewTable"
   (
       "column1" VARCHAR(100) NOT NULL,
       "column2" INTEGER NOT NULL,
       PRIMARY KEY("column1")
       CONSTRAINT "SomeFK" FOREIGN KEY ("column2") REFERENCES "Account" ("ID")
    )
Run Code Online (Sandbox Code Playgroud)

上述语句执行了超过 25 分钟并没有完成。我们终止了交易。

当我们移除外键约束时,它会立即执行。

有人可以让我们知道是什么问题吗?我们最初认为它出于某种原因锁定了“Account”表,但是当我们查看“pg_locks”时,我们没有找到“Account”的任何条目——只有“NewTable”的独占锁。

postgresql foreign-key

10
推荐指数
1
解决办法
6911
查看次数

如何简洁地检查子查询是否只有一个不同的结果和指定的值?

我发现自己写了以下内容:

select 'yes' 
where exists(select * from foo where val=1)
and not exists(select * from foo where val<>1);
Run Code Online (Sandbox Code Playgroud)

并想知道是否有更简洁的方法而不牺牲太多的可读性。

我找到了一种作为答案发布的方法,但我对此并不完全满意,并且对替代方案非常感兴趣

在这种情况下val是唯一的foo- 没有重复

postgresql duplication

10
推荐指数
2
解决办法
5547
查看次数

pgbouncer 中 session pool_mode 的目的是什么?

由于在这种模式下 pgbouncer 为每个入站连接创建出站连接,因此在我看来 pgbouncer 不能作为池化器工作。这只是1对1的映射。

我哪里错了?

postgresql pgbouncer connection-pooling

10
推荐指数
1
解决办法
7267
查看次数

转换测量单位

希望为一系列物质计算最合适的计量单位,其中物质以不同(但兼容)的单位体积给出。

单位换算表

单位转换表存储各种单位以及这些单位之间的关系:

id  unit          coefficient                 parent_id
36  "microlitre"  0.0000000010000000000000000 37
37  "millilitre"  0.0000010000000000000000000 5
 5  "centilitre"  0.0000100000000000000000000 18
18  "decilitre"   0.0001000000000000000000000 34
34  "litre"       0.0010000000000000000000000 19
19  "dekalitre"   0.0100000000000000000000000 29
29  "hectolitre"  0.1000000000000000000000000 33
33  "kilolitre"   1.0000000000000000000000000 35
35  "megalitre"   1000.0000000000000000000000 0
Run Code Online (Sandbox Code Playgroud)

按系数排序表明将parent_id子单元与其上级数值联系起来。

可以使用以下命令在 PostgreSQL 中创建此表:

CREATE TABLE unit_conversion (
  id serial NOT NULL, -- Primary key.
  unit text NOT NULL, -- Unit of measurement name.
  coefficient numeric(30,25) NOT NULL DEFAULT 0, -- Conversion value.
  parent_id integer …
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql postgresql-9.1 number-formatting

10
推荐指数
1
解决办法
4597
查看次数

psql: SELECT * ... 除了一列

我寻找一种简单的方法来选择除 psql 中的一列之外的所有列。

随着psql我的意思是交互式命令行。

我会很高兴有一个工具可以扩展到*引用的列名列表。然后我可以移除列以手动移除。

我的问题只是关于 psql 的交互使用。它不是那些对 sql 标准不满意并且想要执行诸如“select *-foo”之类的问题的人的问题的重复。

postgresql psql

10
推荐指数
1
解决办法
2万
查看次数

行可见性究竟是如何确定的?

在最简单的情况下,当我们向表中插入新行(并且事务提交)时,它将对所有后续事务可见。请参阅xmax此示例中的 0:

CREATE TABLE vis (
  id serial,
  is_active boolean
);

INSERT INTO vis (is_active) VALUES (FALSE);

SELECT ctid, xmin, xmax, * FROM vis;

  ctid ?xmin ? xmax ? id ? is_active 
?????????????????????????????????????
 (0,1) ?2699 ?    0 ?  1 ? f
Run Code Online (Sandbox Code Playgroud)

当我们更新它时(因为该标志是FALSE偶然设置的),它会发生一些变化:

UPDATE vis SET is_active = TRUE;

SELECT ctid, xmin, xmax, * FROM vis;

 ctid ? xmin ? xmax ? id ? is_active 
?????????????????????????????????????
(0,2) ? 2700 ?    0 ?  1 ? t
Run Code Online (Sandbox Code Playgroud)

根据PostgreSQL 使用的 …

postgresql transaction-log mvcc

10
推荐指数
2
解决办法
899
查看次数

在 PostgreSQL 中,行顺序是否保留在函数和 CTE 中?

在 SELECT 语句中,如果未指定 ORDER BY 子句,则不能保证返回行的顺序。这适用于“普通”表。

对于使用 WITH 表达式 (CTE) 生成的有序表也是如此吗?函数返回的有序表?我认为不是。这是文档中明确说明的地方吗?

具体来说,我可以假设这个(更有效的)查询:

WITH ordered AS ( SELECT * FROM table1 ORDER BY col1 )
SELECT sum(col2) result FROM
generate_series(0,50) nr,
LATERAL (SELECT * FROM ordered LIMIT 100 OFFSET nr*100) a
GROUP BY nr ORDER BY nr;
Run Code Online (Sandbox Code Playgroud)

将等同于这个查询:

SELECT sum(col2) result FROM
generate_series(0,50) nr,
LATERAL (SELECT * FROM table1 ORDER BY col1 LIMIT 100 OFFSET nr*100) a
GROUP BY nr ORDER BY nr;
Run Code Online (Sandbox Code Playgroud)

对于函数:

如果我有这样的功能:

CREATE FUNCTION do_sort(name text[]) RETURNS TABLE(name …
Run Code Online (Sandbox Code Playgroud)

postgresql order-by

10
推荐指数
1
解决办法
2983
查看次数

我应该为云托管的 PostgreSQL 数据仓库获得多少 RAM?

我正在考虑将当前的 PostgreSQL 数据仓库迁移到具有 SSD 存储和 RAM 作为主要大小变量之一的云主机。我们目前处理的最庞大的数据将存在于每月分区表中。每个月大约有 70GB 的索引(40-ish w/o)。数据可能主要是定期批量加载,然后由 5 名研究人员组成的小团队访问。

我一直在尝试在此站点上搜索有关规范 RAM 的建议,我发现的所有内容是:

  • 适合整个数据库(>1TB,不现实)
  • 更多更好

是否应该有足够的 RAM 来至少将整个索引 (16GB) 加载到 RAM?我还需要提供其他详细信息吗?

postgresql data-warehouse memory

10
推荐指数
1
解决办法
4493
查看次数

如何将行作为参数传递给 Postgres 函数?

我有一个函数 build_details(),它将另一个表中的单行/记录作为其参数之一。

这是我想要做的,但它不起作用:

SELECT build_details(
    SELECT * FROM my_table LIMIT 1,
    1000,
    TRUE)
Run Code Online (Sandbox Code Playgroud)

我想从 my_table 中取出一行并将其传递给函数,以便我可以运行它。如何使用 my_table 中的记录从终端调用该函数?

postgresql

10
推荐指数
3
解决办法
1万
查看次数