Задача заключается в том, чтобы добавить еще одну колонку для мультиязычности, назвав DocTypeEn, в котором будет перевод.
CREATE TABLE translation (
token_id INT, -- идентификатор строки
language_id INT, -- идентификатор языка
PRIMARY KEY (token_id, language_id),
value VARCHAR(100) NULL DEFAULT NULL
);
SELECT value
FROM translation
JOIN language USING (language_id)
WHERE token_id = @token_id
AND language_name = @language_name;
SELECT COALESCE((
SELECT value
FROM translation
JOIN language USING (language_id)
WHERE token_id = @token_id
AND language_name = @language_name;
), (
SELECT value
FROM translation
JOIN language USING (language_id)
WHERE token_id = @token_id
AND language_name = @default_language_name;
)) value;
{
"ru":"Выход",
"en":"Quit"
}
Если кто-то набросает какой-нибудь PL/pgSQL код в любом фиддле, для иллюстрации что на нем можно делать - буду премного благодарен.
Процедуры, в отличие от функций, не возвращают значение; поэтому в CREATE PROCEDURE отсутствует предложение RETURNS. Однако процедуры могут выдавать данные в вызывающий код через выходные параметры.
?|
в PostgreSQL выполняет поиск строковых значений в списке элементов массива или ключей (имён атрибутов) объекта:jsonb ?| text[] → boolean
Do any of the strings in the text array exist as top-level keys or array elements?
'{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'd'] → t
&&
WITH cte AS (
SELECT t1.cat_id, RANK() OVER (ORDER BY COUNT(t2.cat_id) DESC) rnk
FROM user_to_cat t1
JOIN user_to_cat t2 ON t1.user_id = t2.user_id
AND t1.cat_id <> t2.cat_id
GROUP BY 1
)
SELECT category.code
FROM cte
JOIN category ON category.id = cte.cat_id
WHERE rnk = 1
насколько оптимально такое решение?
INSERT INTO Заказ (ПоставщикID, КлиентID, АдминистраторID, {остальные поля})
VALUES (
(SELECT ПоставщикID FROM Поставщик WHERE Имя = 'Василий Пупкин'),
(SELECT КлиентID FROM ...),
(SELECT АдминистраторID FROM ...),
{остальные значения}
)
Прочитал, что в mysql в движке innodb индексы делятся на два больших типа - первичный и вторичный
кластеризованный, как написано хранится с данными
Всегда ли не кластиризованные индексы хранятся в оперативной памяти или это как-то можно регулировать?
Я слышал что индексы должны быть в пределах мегабайт, а не гигабайт.
Читал, что бывает так, что индекс в таблице индекса хранит сразу данные определенных столбцов, а не ссылки на эти строки в основной таблице.
При этом по факту я спокойно вставляю в таблицу произвольную строку и никакой проверки не происходит, данные спокойно записываются в таблицу.
ОШИБКА: в целевой внешней таблице "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
)
Можно ли как то сделать сортировку того что нужно обновить перед тем как собственно обновлять записи?