我想知道是否可以/如何在一个查询中使用不同的列更新多个记录。
所以我有张桌子
Test {
id integer
name varchar
age integer
}
那么对于test1和测试2,我有
test1 = Test {id=1, name="Joe"}
test2 = Test {id=2, age=22}
即使每个查询都在更新一个不同的列,是否可以使用一个查询来更新这两个列呢?
如果我有多个具有相同字段的对象,如下所示:
UPDATE test as t
SET id = u.id, age = u.age, name = u.name
FR
我可以使用CASE选择在SELECT查询(Postgres)中显示哪些列,如下所示:
SELECT CASE WHEN val = 0 THEN column_x
WHEN val = 1 THEN column_y
ELSE 0
END AS update, ...
在Postgres中执行UPDATE查询时(即选择应该更新哪些列),是否有类似的情况?我认为没有,因为我找不到这方面的任何东西,但是也许有人有一个聪明的选择(除了使用一个过程或使用一个CASE更新每个列以确定该列的值是否应该被分配到一个新值或简单地重新分配现有的值)。
为什么这个查询:
SELECT inv.batch_number_id AS batch_number_id,
inv.expiry_date AS expiry_date,
inv.facility_id AS facility_id,
inv.id AS id,
fac.code AS facility_code,
inv_st.description AS status,
bn.batch_nbr AS batch_number,
bn.expiry_date AS batch_expiry_date,
sum(CASE WHEN al.s
我有下表:
Table "public.product"
Column | Type | Modifiers
--------+---------+------------------------------------------------------
id | integer | not null default nextval('product_id_seq'::regclass)
name | text | not null
Indexes:
"pro
我正在为Postgres 12数据库编写一个幂等模式更改脚本。但是,我注意到,如果在ADD列语句中包含if NOT,那么即使该列已经存在,它也在为已经存在的唯一性约束添加重复索引。简单的例子:
-- set up base table
CREATE TABLE IF NOT EXISTS test_table
(id SERIAL PRIMARY KEY
);
-- statement intended to be idempotent
ALTER TABLE test_table
ADD COLUMN IF NOT EXISTS name varchar(50) UNIQUE;
运行此
我有一个以parent和child作为列的表,我的parent列是一个数组,因为子级可以有多个父级。所以有人可以建议如何构建cte (postgres11.2)来获取child.This的父代和祖先是我的数据。无论数组的位置如何,cte都应该返回正确的父级。
CREATE TABLE public.mytable (
id uuid NOT NULL,
parent_id uuid[],
name character varying(255) COLLATE pg_catalog."default",
created_at timestamp w
假设我有一个包含int列的表,我将从其中读取的只是MAX() int值。
可以,您可以创建触发器来更新跟踪MAX值的单行表,并查询该表,而不是对主表发出MAX()。但我正在寻找一些优雅的东西,因为我知道Postgres有部分索引,而我似乎找不到一种方法来利用它们来达到这个目的。
更新:这个部分索引定义在理想情况下是我想要的,但是Postgres不允许在部分索引的WHERE子句中使用子查询。
create index on test(a) where a = (select max(a) from test);
我检查了在heroku中运行的一个应用程序的日志中的锁,它显示了来自delayed_jobs和increment_counter的很多锁,而且这一次我得到了很多超时
sql_error_code = 00000 LOG: process 129728 still waiting for ShareLock on
transaction 1296511670 after 1000.149 ms
2017-06-02T16:24:58+00:00 app
postgres.129728 - - [TEST] [7-2] sql_error_code = 00000 DETAIL: Proce
我最近注意到Postgres在使用唯一约束处理列中的NULL时出现了不一致的情况。
考虑一张人员表:
create table People (
pid int not null,
name text not null,
SSN text unique,
primary key (pid)
);
SSN列应该保持唯一。我们可以检查一下:
-- Add a row.
insert into People(pid, name, SSN)
values(0, 'Bob', '123');
-- Test the unique constra
在过去的几天里,我在postgres中遇到了全文搜索,当我在多个列中搜索时,我对索引感到有点困惑。
postgres 讨论在级联列上创建ts_vector索引,如下所示:
CREATE INDEX pgweb_idx ON pgweb
USING gin(to_tsvector('english', title || ' ' || body));
我可以这样搜索:
... WHERE
(to_tsvector('english', title||' '||body) @@ to_tsquery('e
Postgres 9.3数据库中有一个表,其json列如下所示:
CREATE mytable (
mycolumn json
)
我想从如下所示的Java应用程序执行查询:
SELECT
mycolumn->>'somefield',
count(*)
FROM
mytable
GROUP BY
mycolumn->>'somefield'
当我尝试使用这样的PreparedStatement时:
SELECT
mycolumn->>?,
count(*)
FROM
mytable
GROUP