linq2db и Postgresql
От: WaSh http://kxlm.blogspot.com/
Дата: 17.02.15 09:23
Оценка:
Есть ли поддержка json/jsonb типов данных для Postgresql ?

Также интересует InsertWithIdentity для этой БД.
Сейчас реализовано через дополнительный "SELECT currval()", почему бы не использовать INSERT INTO cовместно с RETURNING ?
блог http://kxlm.blogspot.com/
linq2db postgresql
Re: linq2db и Postgresql
От: SHEMA  
Дата: 19.02.15 13:59
Оценка:
Здравствуйте, WaSh, Вы писали:

WS>Также интересует InsertWithIdentity для этой БД.

WS>Сейчас реализовано через дополнительный "SELECT currval()", почему бы не использовать INSERT INTO cовместно с RETURNING ?

INSERT INTO .. RETURNING не работает для partitioned таблиц и вообще для таблиц с insert тригерами.
currval() самый надежный способ.
Re: linq2db и Postgresql
От: IT Россия linq2db.com
Дата: 19.02.15 14:46
Оценка:
Здравствуйте, WaSh, Вы писали:

WS>Есть ли поддержка json/jsonb типов данных для Postgresql ?


Ткните в доку, сделаем.

WS>Также интересует InsertWithIdentity для этой БД.

WS>Сейчас реализовано через дополнительный "SELECT currval()", почему бы не использовать INSERT INTO cовместно с RETURNING ?

В принципе, мне без разницы. Через RETURNING сделано для MySql, можно повторить и для PostgreSQL, хотя выше утверждают, что это не лучший вариант.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: linq2db и Postgresql
От: WaSh http://kxlm.blogspot.com/
Дата: 24.02.15 15:31
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, WaSh, Вы писали:


WS>>Есть ли поддержка json/jsonb типов данных для Postgresql ?


IT>Ткните в доку, сделаем.


В принципе, описание типов здесь и здесь

Что нужно конкретно, пока не скажу, разбираюсь...

Но вот такие вопросы уже возникают (не у меня, но что-то похожее)
CREATE TABLE "test" (
    "id" serial NOT NULL PRIMARY KEY,
    "params" json,
);

INSERT INTO test(params) VALUES ('"test"');
INSERT INTO test(params) VALUES ('[1,2,3]');
INSERT INTO test(params) VALUES ('{"a":"test", "b":123}');
INSERT INTO test(params) VALUES ('{"a":"test", "c":{"d":1}}');


>>Выбрать строки с "a"="test"

select * from test where params->>'a' = 'test';



>>Как выбрать строки, где есть ключ "a" и "b"? + сортировка

SELECT * 
FROM test
WHERE (params->>'a') IS NOT NULL AND (params->>'b') IS NOT NULL
ORDER BY params->>'a' DESC

>>Как выбрать строки, где есть ключ "a" и ("b" или "c")?
SELECT *
FROM test
WHERE (params->>'a') IS NOT NULL AND 
    ((params->>'b') IS NOT NULL OR (params->>'c') IS NOT NULL)
ORDER BY params->>'a' DESC

>>Как выбрать строки, где в ключе "c" есть ключ "d"?
SELECT *
FROM test
WHERE ((params->'c')->>'d') IS NOT NULL 
ORDER BY params->>'a' DESC
блог http://kxlm.blogspot.com/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.