小编Lau*_*lbe的帖子

使用不带 AS 的别名

我从参考注释中找到了以下查询,我可以看到将lineitem表命名为l1并将lineitem表命名为l2

select avg(l_extendedprice) from lineitem l1
where l_extendedprice =
(select min(l_extendedprice) from lineitem l2
where l1.l_orderkey = l2.l_orderkey);
Run Code Online (Sandbox Code Playgroud)

这是一个有效的别名方法,无需显式使用AS?如果这不是 Postgres 中的别名,那么这个约定是什么?

postgresql alias

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

PostgreSQL触发器是异步的吗?

抱歉,我是SQL触发器的新手,需要一些帮助.

我在UPDATE我的一个PostgreSQL表上创建了一个触发器.触发器调用DELETE另一个表.我的问题是:请求的触发器部分是否与请求异步或同步UPDATE

有关更多信息,请参阅我的触发器和功能:

CREATE OR REPLACE FUNCTION expire_table() RETURNS trigger AS $expire_table$
  BEGIN
     DELETE FROM object_store WHERE p_time < NOW() - INTERVAL '6 months';
     RETURN NEW;
  END;
$expire_table$ LANGUAGE 'plpgsql';

CREATE TRIGGER expire_table_trigger
  AFTER UPDATE ON objects
EXECUTE PROCEDURE expire_table();
Run Code Online (Sandbox Code Playgroud)

我希望触发器部分是异步的,或者有一种方法可以实现.

postgresql

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

使用并发刷新物化视图

我有一个PostgreSQL数据库,我使用物化视图.当我尝试刷新这些物化视图时会出现问题.

REFRESH MATERIALIZED VIEW product_cat_mview;
REFRESH MATERIALIZED VIEW productsforproject;
Run Code Online (Sandbox Code Playgroud)

我的解决方案是,当用户想要查看更新的数据时,他应该单击网页上的"刷新按钮",但这需要大约50秒(在本地连接上,距离应用程序服务器大约2分钟)并且所有这一次用户必须等待,这是不好的.

现在我应该创建一个解决方案,每10分钟自动刷新这些物化视图.我用多线程创建了一个Java解决方案.但我有一个问题.

第一个查询

REFRESH MATERIALIZED VIEW CONCURRENTLY product_cat_mview;
Run Code Online (Sandbox Code Playgroud)

工作正确,但第二

REFRESH MATERIALIZED VIEW CONCURRENTLY productsforproject;
Run Code Online (Sandbox Code Playgroud)

抱怨我需要创建一个独特的索引.我尝试在谷歌中找到创建索引,唯一索引等,但我仍然收到"创建唯一索引"的消息.

postgresql materialized-views

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

如何在 PostgreSQL 中将 int 转换为 string

我有这个:COALESCE(amount ,0) as amount。的数据类型amountnumeric.

而不是0我想要的N/A。我怎样才能做到这一点?我收到错误:

ERROR:  invalid input syntax for type numeric: "N/A"
Run Code Online (Sandbox Code Playgroud)

postgresql

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

我无法启动服务器 PostgreSQL 11:“pg_ctl:无法启动服务器”

我在 CentOS Linux 版本 7.5.1804(核心)

当我登录postgres并运行时:

bash-4.2$ /usr/pgsql-11/bin/initdb -D /var/lib/pgsql/11/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

creating directory /var/lib/pgsql/11/data ... ok
creating subdirectories ... ok
selecting default max_connections ... …
Run Code Online (Sandbox Code Playgroud)

postgresql centos7 postgresql-11

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

PostgreSQL:后台工作程序“逻辑复制启动器”以退出代码 1 退出

使用我们自己的 Gitlab 实例,当我们background worker "logical replication launcher" exited with exit code 1尝试在我们的跑步者中使用 postgres 服务时,我们会收到错误消息。在互联网上没有找到任何有用的东西。知道发生了什么吗?

版本:

  • 亚搏体育app 12.4.3
  • gitlab-runner 12.5.0(限制 4 个并发作业)
  • postgres 12.1(尝试了 11 和相同的结果)
  • DigitalOcean Droplet:CPU 优化 / 8 GB / 4 vCPU

相关部分gitlab-ci.yml

image: golang:1.12

services:
  - postgres

variables:
  POSTGRES_USER: postgres
  POSTGRES_DB: xproject_test
  POSTGRES_PASSWORD: postgres
Run Code Online (Sandbox Code Playgroud)

失败日志:

image: golang:1.12

services:
  - postgres

variables:
  POSTGRES_USER: postgres
  POSTGRES_DB: xproject_test
  POSTGRES_PASSWORD: postgres
Run Code Online (Sandbox Code Playgroud)

postgresql gitlab docker gitlab-ci-runner

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

具有多列唯一约束名称的 PostgreSQL ON CONFLICT

我在尝试UPSERT使用 PostgreSQL时遇到了我不明白的行为。该文件似乎表明,冲突的目标中的INSERT语句可以是一个索引表达式约束的名称。但是,当尝试引用约束名称时,出现“列...不存在”错误。

我的第一次尝试是创建一个UNIQUE索引,它可以很好地与约束推断配合使用:

create table kv (key text, value text, extra text);
create unique index kv_key_value on kv(key, value);
insert into kv (key, value) values ('k1', 'v1');
-- this works:
insert into kv (key, value, extra) values ('k1', 'v1', 'e1')
  on conflict (key, value) do update set extra=excluded.extra;

-- this does not
insert into kv (key, value, extra) values ('k1', 'v1', 'e1')
  on conflict (kv_key_value) do update set extra=excluded.extra;
Run Code Online (Sandbox Code Playgroud)

描述上表,我在“索引”下看到以下内容: …

sql postgresql upsert

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

PostgreSQL ALTER COLUMN TYPE int到bigint的持续时间

假设我有一张桌子,桌子上有id一个INTEGER GENERATED BY DEFAULT AS IDENTITY

我打算记录如何更改类型,如果将来integer太小而需要将id类型从更改integerbigint。我主要担心更改的时间复杂性,因为当表中的行数接近整数类型可以存储的最大数目时,很可能会发生更改。

以下命令的时间复杂度是多少?

ALTER TABLE project ALTER COLUMN id TYPE BIGINT;
Run Code Online (Sandbox Code Playgroud)

postgresql type-conversion time-complexity postgresql-10

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

Postgres:锁释放后 SELECT FOR UPDATE 看不到新行

尝试在我的应用程序中支持 PostgreSQL DB,发现了这种奇怪的行为。

准备:

CREATE TABLE test(id INTEGER, flag BOOLEAN);
INSERT INTO test(id, flag) VALUES (1, true);
Run Code Online (Sandbox Code Playgroud)

假设有两个并发事务 ( Autocommit=false, READ_COMMITTED ) TX1TX2

TX1:

UPDATE test SET flag = FALSE WHERE id = 1;
INSERT INTO test(id, flag) VALUES (2, TRUE);
-- (wait, no COMMIT yet)
Run Code Online (Sandbox Code Playgroud)

TX2:

SELECT id FROM test WHERE flag=true FOR UPDATE;
-- waits for TX1 to release lock
Run Code Online (Sandbox Code Playgroud)

现在,如果我在TX1中COMMIT,则 TX2 中的 SELECT 将返回空光标。

这对我来说很奇怪,因为 Oracle 和 MariaDB 中的相同实验导致选择新创建的行 (id=2)。

我在 …

postgresql locking transactions postgresql-11 select-for-update

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

如何修复“postgres.h”文件未找到的问题?

我正在尝试在 C 中为 PostgreSQL 编写一个基本类型(使用 xcode),并且我已经安装了 PostgreSQL 11,但似乎postgres.h不能简单地包含在文件中(“'postgres.h' 文件未找到”)。

有人能告诉我如何解决这个问题吗?而且我可以在任意目录下编写代码,还是必须在PostgreSQL目录下编写?

或者也许问题应该是:如何安装头文件postgres.h

c postgresql postgresql-11

8
推荐指数
2
解决办法
9836
查看次数