При этом по факту я спокойно вставляю в таблицу произвольную строку и никакой проверки не происходит, данные спокойно записываются в таблицу.
ОШИБКА: в целевой внешней таблице "users" нет ограничения уникальности, соответствующего данным ключам
FOREIGN KEY(user_id) REFERENCES users (user_id)
create table test(
id SERIAL PRIMARY KEY,
num int,
t text,
constraint u_constrainte unique (num, t) DEFERRABLE
)
Можно ли как то сделать сортировку того что нужно обновить перед тем как собственно обновлять записи?
WITH
cte1 AS (
SELECT jsonb_build_object('name', users.name,
'value', comments.value,
'rating', comments.rating) single_user,
comments.order_id,
'comment' || ROW_NUMBER() OVER (PARTITION BY comments.order_id ORDER BY comments.id) num
FROM users
JOIN comments ON users.id = comments.user_id
),
cte2 AS (
SELECT jsonb_build_object('order_id', order_id) ||
jsonb_object_agg(num, single_user) single_order
FROM cte1
GROUP BY order_id
)
SELECT jsonb_agg(single_order) final_data
FROM cte2;
SELECT "Items"."itemId", sum(price) / sum( sum(price) ) OVER ()
FROM "Items"
INNER JOIN "Purchases" USING("itemId")
GROUP BY "Items"."itemId"
начать поиск элемента в таблице в БД с конца
как получить id последнего элемента в таблице?
CREATE FUNCTION fn_test()
RETURNS TRIGGER
AS $fn_test$
BEGIN
IF OLD.val1 <> NEW.val1 THEN -- задать условие
NEW.id := NEW.id * 10; -- выполнить действие
END IF;
RETURN NEW;
END;
$fn_test$ LANGUAGE plpgsql;
CREATE TRIGGER tr_test
BEFORE UPDATE ON test
FOR EACH ROW
EXECUTE FUNCTION fn_test();
CREATE FUNCTION fn_test()
RETURNS TRIGGER
AS $fn_test$
BEGIN
NEW.id := NEW.id * 10; -- выполнить действие
RETURN NEW;
END;
$fn_test$ LANGUAGE plpgsql;
CREATE TRIGGER tr_test
BEFORE UPDATE ON test
FOR EACH ROW
WHEN (OLD.val1 <> NEW.val1) -- задать условие
EXECUTE FUNCTION fn_test();
CREATE TABLE trs (
wallet_id INT,
amount DECIMAL(12, 2),
hash BYTEA GENERATED ALWAYS AS (sha256((wallet_id + amount) :: TEXT :: BYTEA)) STORED
)
из конкатенированный строки wallet_id + hash
CREATE TABLE trs (
wallet_id INT,
amount DECIMAL(12, 2),
hash BYTEA GENERATED ALWAYS AS (sha256((wallet_id :: TEXT || amount :: TEXT) :: BYTEA)) STORED
)
select *
from products
order by type ASC,
case WHEN type = 'books' then id ELSE 0 END desc,
case WHEN type = "food" then name ELSE 0 END asc,
case WHEN type = "food" then price ELSE 0 END desc,
case WHEN type = "relax" THEN popular ELSE 0 END asc,
case WHEN type = "relax" THEN id ELSE 0 END desc
CREATE TABLE tasks (
id PRIMARY KEY,
definition,
performer_id REFERENCES performer (id)
expired_at DATETIME
);
UPDATE tasks
SET performer_id = @performer_idб
expired_at = NOW() + INTERVAL 'performing time'
WHERE ( expired_at IS NULL or expired_at < NOW() )
AND ( id = @task_id )