从PostgreSQL维基,
MERGE通常用于合并两个表,并在2003年的SQL标准中引入。REPLACE语句( MySQL扩展)或UPSERT序列尝试UPDATE或失败时的INSERT。这类似于UPDATE,然后对于不匹配的行,INSERT。并发访问是否允许可能导致行丢失的修改是独立于实现的。
此外,PostgreSQL的INSERT ... ON CONFLICT DO NOTHING/UPDATE被推广为UPSERT,并在9.5中添加
那么MERGE是什么呢?它是如何融入其中的呢?
这只是一个SSCCE:
CREATE TABLE test(i INTEGER NOT NULL);
WITH max_i AS (SELECT MAX(i) FROM test)
SELECT * FROM test WHERE max_i - i < 2 AND max_i!=i
PostgreSQL抱怨:
ERROR: column "max_i" does not exist
我猜这是因为max_i是单个值,而不是行集,但是如何在通过复杂查询获得的查询值中只定义一次,而不必在每次使用子查询时重复子查询?
我目前正在尝试更新表中的所有行,方法是根据同一行中另一列images的值设置一列source_images的值。
for row in Cars.query.all():
# Generate a list of strings
images = [s for s in row.source_images if 'example.com/' in s]
# Column 'images' being updated is a sqlalchemy.dialects.postgresql.ARRAY(Text())
Cars.qu
我现在使用的是PostgreSQL 10。在RHEL 7上安装了最新的男爵。
当我由酒保用户运行这个命令时:
-bash-4.2$ barman receive-wal pg
Starting receive-wal for server pg
ERROR: ArchiverFailure:pg_receivexlog not present in $PATH
官方介绍
WAL streaming
Barman can reduce the Recovery Point Objective (RPO) by allowing users to add continuous WAL strea
我需要在oracle和postgresql上执行完全相同的查询,我需要删除表1中的行,使用表2上的连接。我已经有一个有效的查询,但它在" in“语句中有1000+结果的oracle停止工作。 delete from t1
where
t1.oid IN
(SELECT oid from t2 WHERE [condition]) 我读过有关连接的内容,但postgresql使用的是"using“关键字 DELETE [target table]
FROM [table1]
INNER JOIN [table2]
ON [table1.
如果可能,请帮助我提高查询性能。
我有以下问题
select
s."CustomerCode",
s."MaterialCode",
fw."Name",
fw."ReverseName",
s."Uc"
from
"Sales" s
left join
"FiscalWeeks" fw on s."SalesDate" betwee
我有一个简单的PostgreSQL function..something,如下所示
CREATE FUNCTION reffunc(refcursor) RETURNS refcursor AS '
BEGIN
OPEN $1 FOR
SELECT col
FROM test
WHERE cola = 1;
RETURN $1;
END;
' LANGUAGE plpgsql;
问题是,当我运行下面的sql时,假设我得到了10行
SELECT col
FROM test
WHERE cola
我在PostgreSQL上调用了这个查询,它返回了所有表行的计数!
但是为什么呢?ON部分总是假的,那么结果应该是空的!
select
count(*)
from
skyroom_files f
left join users u on f.user_id = u.id
and f.id = -1;
我为最后一部分尝试了另一个值,它总是返回所有行的计数!
我有一个相当大的表(大约100M行),并且这个表有两个boolean列。我们称它们为a和b。我想要获取所有行,其中a is not equal to b
SELECT *
FROM table
WHERE a <> b
为此,我是否需要两个索引,一个在a上,一个在b上,或者在(a, b)上也可以使用合成索引?
我使用的是PostgreSQL 9.6,很快就会升级到10.1。
如果不存在给定的tableA行(在PostgreSQL中),我希望将新行插入到id_client中:
INSERT INTO tableA(id_client, opr_wpr, data_wpr)
VALUES((SELECT id_client FROM tableB WHERE id = 272), 212121, now());
我怎么能这么做?
我在PostgreSQL和MySQL下都遇到了以下触发器的问题。第三行有bug,等等。应该创建一个触发器,根据讲课的时长增加教授的工资。
create create trigger viellehre after insert on Vorlesungen referencing new as vo_neu foreach row when group by vo_neu.gelesenvon
having sum(Vorlesungen.SWS) > 5 and
sum(Vorlesungen.SWS) - vo_neu.SWS <= 5
update Professore
我在postgresql中有两个表,其中一个表的形式是 Create table table1(
ID serial PRIMARY KEY,
Type []Text
)
Create table table2(
type text,
sellerID int
) 现在我想从table1中获取所有的行,这些行的类型与table2中的类型相同,但问题是在table1中,类型是一个数组。
我是postgreSQL的新手。我有两个表,主表和辅表,每个表有一列 main data
test1@james.com
john@gmail.com
nnn@bff.com
laura@gg.com
jamessaraha@rrr.org
... 次要 name
james
john 预期输出: data
nnn@bff.com
laura@gg.com 如果name不在data中(不区分大小写),我希望使用辅助(40k行)中的名称过滤main (10mil行)。 注意:两个表都有唯一的数据
PostgreSQL。我有两张桌子。我使用insert对所有列使用insert将数据按时间添加到第一个表。
Table1:
CREATE TABLE purchases (
id INTEGER,
name VARCHAR,
qty INTEGER,
date TIMESTAMP,
price NUMERIC,
about VARCHAR )
Table2:
CREATE TABLE result (
id INTEGER,
name VARCHAR,
qty INTEGER,
date TIMESTAMP,
profit NUMERIC,
sold NUMERIC )
如果table1中
此查询在MySQL中运行良好,但在PostgreSQL中不工作:
select
concat(hc.id, hl.languagecode) AS id,
hc.id AS category_id,
hl.languagecode AS languagecode
from language hl
join category hc
left join categorytranslation hct ON hl.languagecode = hct.languagecode and hc.id = hct.category_id;
在PostgreSQL中,有时会出现以下错误:
错误:输入第9行
如果我尝试nmap到我的服务器(CentOS 7),我会得到如下内容:
$ nmap myserver.com
Nmap scan report for myserver.com (1.2.3.4)
Host is up (0.93s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE
22/tcp open ssh
5432/tcp open postgresql
我不喜欢显示服务的名称。我可以在服务器myserver.com上设置服务的名称吗?
例如,
:
我要输出这一行:
5432/tcp open
我正在与postgreSQL一起使用play框架,并试图从表中的特定行和列中只获取一个值。程序编译代码没有问题,但是当调用这个代码的操作时,它就不能工作了。SQL查询运行良好,我在psql中检查了它。
DB.withConnection { implicit connection =>
val selectSalt: Option[String] = SQL("""
select salt from devices
where principal_id=(
select id from principals