我从参考注释中找到了以下查询,我可以看到将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 中的别名,那么这个约定是什么?
抱歉,我是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数据库,我使用物化视图.当我尝试刷新这些物化视图时会出现问题.
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)
抱怨我需要创建一个独特的索引.我尝试在谷歌中找到创建索引,唯一索引等,但我仍然收到"创建唯一索引"的消息.
我有这个:COALESCE(amount ,0) as amount。的数据类型amount是numeric.
而不是0我想要的N/A。我怎样才能做到这一点?我收到错误:
ERROR: invalid input syntax for type numeric: "N/A"
Run Code Online (Sandbox Code Playgroud) 我在 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) 使用我们自己的 Gitlab 实例,当我们background worker "logical replication launcher" exited with exit code 1尝试在我们的跑步者中使用 postgres 服务时,我们会收到错误消息。在互联网上没有找到任何有用的东西。知道发生了什么吗?
版本:
相关部分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) 我在尝试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)
描述上表,我在“索引”下看到以下内容: …
假设我有一张桌子,桌子上有id一个INTEGER GENERATED BY DEFAULT AS IDENTITY
我打算记录如何更改类型,如果将来integer太小而需要将id类型从更改integer为bigint。我主要担心更改的时间复杂性,因为当表中的行数接近整数类型可以存储的最大数目时,很可能会发生更改。
以下命令的时间复杂度是多少?
ALTER TABLE project ALTER COLUMN id TYPE BIGINT;
Run Code Online (Sandbox Code Playgroud) 尝试在我的应用程序中支持 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 ) TX1和TX2:
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
我正在尝试在 C 中为 PostgreSQL 编写一个基本类型(使用 xcode),并且我已经安装了 PostgreSQL 11,但似乎postgres.h不能简单地包含在文件中(“'postgres.h' 文件未找到”)。
有人能告诉我如何解决这个问题吗?而且我可以在任意目录下编写代码,还是必须在PostgreSQL目录下编写?
或者也许问题应该是:如何安装头文件postgres.h?
postgresql ×10
alias ×1
c ×1
centos7 ×1
docker ×1
gitlab ×1
locking ×1
sql ×1
transactions ×1
upsert ×1