标签: postgresql

如何在 postgresql 中选择特定值的计数而不进行分组?

我有一个视图,它是两个选择的 UNION 的结果。它有类似这样的内容:

id foreignkey
1  a
2  a
3  b
4  c
Run Code Online (Sandbox Code Playgroud)

我希望在视图的定义中添加一列,该列将显示值的计数,但不会聚合它们。像这样的事情:

id foreignkey count
1  a          2
2  a          2
3  b          1
4  c          1
Run Code Online (Sandbox Code Playgroud)

我现有的查询基本上是:

create or replace view x as
select * from a
union
select * from b
Run Code Online (Sandbox Code Playgroud)

我想要计算联合的结果,但我不知道该怎么做。

编辑 - 取得了一些进展,使用普通的表格我可以做到这一点:

SELECT *,
 (select count(id) from mytable where t.data = data)
FROM mytable as t
Run Code Online (Sandbox Code Playgroud)

这个问题之所以出现,是因为该表实际上是两个表的并集。不知道如何在不进行两次联合的情况下做到这一点?

postgresql

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

用户使用日期排序数据的 ORDER BY 查询是否可以是不确定的?

我的数据库中有一个表,我使用以下标准存储日期:YYYY-MM-DD。正如你所看到的,我没有节省时间。第一次将同一个表导出到 csv 文件时,我按顺序获得了以下记录:

AAA@outlook.com
BBB@gmail.com
CCC@gmail.com
DDD@hotmail.com
Run Code Online (Sandbox Code Playgroud)

但是,当我运行相同的查询将数据导出到相同的 CSV 时,我按以下顺序收到了记录:

AAA@outlook.com
111@hotmail.com
222@gmail.com
333@gmail.com
Run Code Online (Sandbox Code Playgroud)

因此,我得出的结论是对数据进行排序,因为这可能是不确定的。不是吗?这是我从数据库导出数据的查询:

SELECT id AS "_id", cpf, email, name, agency, account, "createdDate" FROM "NextUsers", "Users" WHERE "userId"="Users".id ORDER BY "createdDate" OFFSET $1 LIMIT 500;
Run Code Online (Sandbox Code Playgroud)

其中 $1 从 0 开始,每次迭代都会增加 500。OBS:两个查询返回的数据均已正确排序,但顺序与您所看到的不同。

postgresql order-by

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

PostgreSQL - PUBLICATION 尝试复制另一个数据库中已存在的数据?

我在一台服务器上有数据库和表 collection_city 。它有 21 行。我在第二台服务器上有数据库和表 collection_city 。它也有 21 行。

他们都有这一行:

tinker=# table collection_city;
 id |     name      |    alias     | postal_code | region_id 
----+---------------+--------------+-------------+-----------
  2 | Obrenovac     | obrenovac    |             |         1
Run Code Online (Sandbox Code Playgroud)

id 列是主键。

我在第一台服务器上创建了发布:

CREATE PUBLICATION tinkerpub FOR ALL TABLES;

tinker=# \dRp[+]
                      Publication tinkerpub
  Owner   | All tables | Inserts | Updates | Deletes | Truncates 
----------+------------+---------+---------+---------+-----------
 postgres | t          | t       | t       | t       | t
(1 row)
Run Code Online (Sandbox Code Playgroud)

我在第二台服务器上创建了订阅:

CREATE SUBSCRIPTION tinkersub CONNECTION 'dbname=tinker host=192.168.150.5 user=postgres password=test port=5432' …
Run Code Online (Sandbox Code Playgroud)

postgresql replication master-slave-replication postgresql-11

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

从子查询中的多行中选择一张表中的结果

我正在寻找如何根据 PostgreSQL (10) 中子查询的结果从一个表中选择多行。我对高级数据库概念不是很熟悉,所以我可能会在这里遗漏一些明显的东西(即我的词汇量可能不够)。我不知道该怎么做PARTITION BY,但也许这是可能的。

数据库小提琴:https://www.db-fiddle.com/f/w7EwvYujxg4wmL7wHkfBdD/0

CREATE TABLE devices(id INTEGER PRIMARY KEY, name VARCHAR UNIQUE);
CREATE TABLE results(id INTEGER PRIMARY KEY, test_name VARCHAR, results JSON, state VARCHAR);
CREATE TABLE results_for_device(results_id INTEGER, device_id INTEGER, PRIMARY KEY(results_id, device_id));

INSERT INTO devices(id, name) VALUES
    (1, 'Dev1'),
    (2, 'Dev2');

INSERT INTO results(id, test_name, results, state) VALUES

    # Results thread for 'test1' and 'Dev1'
    (1, 'test1', '{}', 'CURRENT_BLUEPRINT'),       # Select all the below results in this section
    (2, 'test1', '{}', 'MATCHING_BLUEPRINT'),
    (3, …
Run Code Online (Sandbox Code Playgroud)

postgresql

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

在 postgres 函数依赖统计的上下文中,“完全确定”是什么意思?

我正在遵循此页面中如何在 postgresql 中使用“创建统计信息”的示例。

CREATE TABLE tbl (
                     col1 int,
                     col2 int
);

INSERT INTO tbl SELECT i/10000, i/100000
FROM generate_series (1,10000000) s(i);

CREATE STATISTICS s1 (dependencies) on col1, col2 from tbl;
ANALYZE tbl;

SELECT stxname, stxkeys, stxdependencies
FROM pg_statistic_ext
WHERE stxname = 's1';  
Run Code Online (Sandbox Code Playgroud)

返回:

stxname,stxkeys,stxdependencies
s1,1 2,{"1 => 2": 1.000000}
Run Code Online (Sandbox Code Playgroud)

然而,我对这条线感到困惑

观察这个,我们可以看到 Postgres 意识到 col1 完全决定 col2,因此有一个系数 1 来捕获该信息。

在示例中,col2 中有许多重复的记录。那么 col1 如何“完全确定”col2 呢?这是什么意思?

postgresql

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

生成唯一的随机字符串,用作 PostgreSQL 中新创建的行内字段的值

我有这个生成随机字符串的语句:

SELECT string_agg (substr('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', ceil (random() * 62)::integer, 1), '')
FROM generate_series(1, 20);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何在函数内实现此功能,该函数会将上述语句的值自动分配给url_prefix创建新记录时命名的字段(on INSERT's)?

postgresql stored-procedures insert random functions

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

表中有一个列,但无法从这部分查询中引用它

我一直在学习Postgres(来自SQL Server),这个错误真的让我很困惑。

\n\n

这是带有一些示例数据的代码:

\n\n
create table T (\nID serial primary key,\nA varchar(1),\nB varchar(1),\nC varchar(1)\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x86\x91 测试表。

\n\n
insert into T (A, B, C)\nvalues('A', 'B', 'C'), ('A', 'B', 'C')\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x86\x91 插入重复项

\n\n
delete from T\nwhere ID in (\n    select t.ID\n    from (  select ID, row_number() over (partition by A,B,C order by A,B,C) as rn\n            from T) as t\n    where t.rn < (select max(t.rn) from t)\n    )\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x86\x91 删除重复项并保留最后一个条目。

\n\n

问题在于(select max(t.rn) from t)我假设这是一个菜鸟错误,与在引用带有别名的列时不知道 postgres 语法有关? …

postgresql duplication subquery

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

触发功能不存在,但我很确定它存在

我有一个程序:

create or replace procedure pro_update_last_read(in input_sensor_id integer, in read_time timestamp)
as
$$
begin
    update sensor
    set last_read = read_time
    where sensor_id = input_sensor_id;
end;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)

以及一个调用它的触发器:

create trigger tri_last_read
    after insert or update of report_time
    on report
execute procedure pro_update_last_read(sensor_id, report_time);
Run Code Online (Sandbox Code Playgroud)

但是,在创建触发器时,我收到错误消息:

 [42883] ERROR: function pro_update_last_read() does not exist
Run Code Online (Sandbox Code Playgroud)

为什么会发生这个错误?

postgresql trigger stored-procedures plpgsql functions

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

Postgresql 类似于 SQL Server 查询存储

是否有任何可用于 Postgresql 的类似于 SQL Server 查询存储的扩展。这样它可以帮助识别性能瓶颈。

SQL Server 查询存储提供有关查询执行次数、每个查询的资源消耗的信息。https://learn.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-ver15提供了有关查询存储的更多详细信息。

postgresql performance monitoring postgresql-performance

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

PostgreSQL 的第二实例安装?

Stack Overflow 上发布的原始问题相关。

有兴趣使用 C# 应用程序(适用于 Windows)分发 PostgreSQL 的副本。但是,尝试了解应如何处理以下情况:

  • PostgreSQL 已安装在用户系统上

根据我的理解,应该可以安装 PostgreSQL 的第二个实例以在同一计算机系统上同时运行(作为不同的服务,绑定到不同的 TCP 端口#?)。然而,关于如何完成此操作的最接近的答案可以在这里找到,但它并没有真正提供很多细节。

到目前为止,在我的测试环境 (VM) 中,我有一个 Ver.1 实例。12 PostgreSQL安装在默认目录中C:\Program Files\PostgreSQL\12

我是否正确地理解我应该复​​制目录的所有内容C:\Program Files\PostgreSQL\12并复制/粘贴到不同的目录(例如C:\Program Files\PostgreSQL\Test12

然后,运行pg_ctl register,但是有什么选项呢?

然后,我应该跑吗pg_ctl start

在完成这一切之前,是否需要考虑任何事项?

postgresql installation

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