Size: a a a

pgsql – PostgreSQL

2020 June 11

s

sexst in pgsql – PostgreSQL
Роман Жарков
with foo as ( select id from test order by random() desc limit 3 ) delete from test where id in ( select id from foo );
Так тонко, что даже толсто)
источник

s

sexst in pgsql – PostgreSQL
Dima Nazdratenko
подскажите, можно ли как-то приписать в запросе при добавлении строки что бы в столбец name зашло значение + id этого столбца? Что бы не городить уникальность с помощью name+Date.now() или uuid

Хотелось бы в запросе как-то дописать и что бы в базу залетало name+id
А не вариант добавить отдельный столбец с serial и проверять уникальность по двум столбцам? Это как-то... естественнее выглядит что ли.
источник

DN

Dima Nazdratenko in pgsql – PostgreSQL
sexst
А не вариант добавить отдельный столбец с serial и проверять уникальность по двум столбцам? Это как-то... естественнее выглядит что ли.
Уникальность должна быть в имени) я ее потом вывожу на фронтенд, а не для выборки с таблицы)
источник

s

sexst in pgsql – PostgreSQL
А К
я делаю скрапер который сохроняет комменты в бд. каждый час добавляются только те комментарии которых ещё нет. в конце дня мне надо проверить последний скрап с предпоследним и узнать каких комментариев в последнем нет после чего им присвоить тэг deleted. как это лучше сделать?
Если вы при каждой последующей записи дописываете только новые появившиеся комментарии, то, очевидно даже для хлебушка, что вы не имеете понятия какие комментарии у вас удалили. Вы же это не пишете. Либо нужно сразу при очередной записи выбирать все комментарии, которые существовали на момент предыдущей записи, и каждый из них проверять на предмет их существования на данный момент, отмечая те, что удалили. Можно банально отдельную колонку со статусом добавить. Либо каждый раз писать полностью весь список комментариев и сравнивать в конце дня два последних списка.
источник

s

sexst in pgsql – PostgreSQL
Dima Nazdratenko
Уникальность должна быть в имени) я ее потом вывожу на фронтенд, а не для выборки с таблицы)
Если это чисто для вывода, а выборки с where name=name{$id} не планируются, то можно же просто выбирать  concat(name, id) name.

Не, можно, конечно и триггеры, но мне лично вариант с колонкой кажется проще и нагляднее.
источник

DN

Dima Nazdratenko in pgsql – PostgreSQL
sexst
Если это чисто для вывода, а выборки с where name=name{$id} не планируются, то можно же просто выбирать  concat(name, id) name.

Не, можно, конечно и триггеры, но мне лично вариант с колонкой кажется проще и нагляднее.
Ну или так, спс
источник

s

sexst in pgsql – PostgreSQL
Den KP
Алоха друзья! Вопрос на засыпку, подключил Oracle_fdw и подключить таблицы схемы. Вопрос: Наблюдаю что не отображаются индексы, как будто их нет. Так ли это? И можно ли в данном случае добавлять индексы в подключенной схеме
Подключенные таблицы, далеко-далеко под капотом, являются обычными клиентскими запросами в оракл. Постгрес, грубо говоря, в итоге просто конструирует селекты и делает запросы в оракл. Совершенно так же, как это делает любой абстрактный код, обращающийся в базу данных.  Нет никакого понимания того, что в любой отдельный момент лежит в таблицах оракла. Никто не присылает вам  оповещения о изменениях в данных этих таблиц. Соответственно нет никакой технической возможности построить индекс. Да и незачем абсолютно.
источник

AI

Alex Ivashkin in pgsql – PostgreSQL
Привет! Подскажите, есть у меня табличка типа id | state | date
Надо мне достать отсюда все записи с уникальным state (причём самый последний), а потом отсортировать по date.

select distinct on (state) * from x order by state, date desc;

Вернёт мне записи, отсортированные по state. А мне надо их как-то пересортировать по date ещё (также по desc). Грузить всё это в приложение и там сортировать вообще кажется не правильным. Интернет даёт какие-то странные предложения(
источник

AI

Alex Ivashkin in pgsql – PostgreSQL
Мне надо, условно, такое (конечно, pgsql не скушает):

select distinct on (state) * from x order by date desc, state;
источник

AI

Alex Ivashkin in pgsql – PostgreSQL
Subquery делать тоже очень не хочется, ведь тогда все индексы отъедут :(
источник

KK

Konstantin K in pgsql – PostgreSQL
row_number() over (partition by state order by date desc) as rnum
источник

KK

Konstantin K in pgsql – PostgreSQL
а потом select ... where rnum = 1
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Grigory Smolkin
просто не надо эксплуатировать постгрес в ubuntu/debian
Вы закладываетесь на сомнительную обвязку, к которой даже документации нет
Вот не надо таких советов)
источник

AI

Alex Ivashkin in pgsql – PostgreSQL
Konstantin K
row_number() over (partition by state order by date desc) as rnum
Я чувствовал, что оконные функции тут могут помочь, но вот придумать что-то не мог. Спасибо большое! Насколько это будет медленнее, чем distinct?
источник

ВК

Виталий Кухарик... in pgsql – PostgreSQL
Дмитрий Лукьянов
А где хорошо PG живёт? Чтоб без проблем, и всё из пакетов? Мы вот в SuSe используем, но всё собираем сами. В пакетах нихрена нет.
У нас PG хорошо на Debian 9/10.
источник

AI

Alex Ivashkin in pgsql – PostgreSQL
Konstantin K
row_number() over (partition by state order by date desc) as rnum
Да и не завелось :(
[42703] ERROR: column "rnum" does not exist
источник

s

sexst in pgsql – PostgreSQL
Как уже писалось - все фломастеры разные. Я вот замечательно живу не на дебианах/шляпоосях. Советовать другому человеку дистрибутив - неблагодарное занятие, могут и послать.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alex Ivashkin
Мне надо, условно, такое (конечно, pgsql не скушает):

select distinct on (state) * from x order by date desc, state;
Хмм... а чем то, что нужно, отличается от:
WITH x (id, state, date) AS (
VALUES
(1, 'state1', '2019-01-01'),
(2, 'state1', '2019-01-02'),
(3, 'state1', '2019-01-03'),
(4, 'state2', '2019-01-04'),
(5, 'state2', '2019-01-05'),
(6, 'state3', '2019-01-06')
)
SELECT DISTINCT ON (state) *
 FROM x
ORDER BY state, date DESC;
?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Alex Ivashkin
Subquery делать тоже очень не хочется, ведь тогда все индексы отъедут :(
Почему Вы так думаете, кстати?
Вот как раз с DISTINCT ON / ROW_NUMBER эффективного использования индексов Вам не видать, если что.
источник

AI

Alex Ivashkin in pgsql – PostgreSQL
Yaroslav Schekin
Хмм... а чем то, что нужно, отличается от:
WITH x (id, state, date) AS (
VALUES
(1, 'state1', '2019-01-01'),
(2, 'state1', '2019-01-02'),
(3, 'state1', '2019-01-03'),
(4, 'state2', '2019-01-04'),
(5, 'state2', '2019-01-05'),
(6, 'state3', '2019-01-06')
)
SELECT DISTINCT ON (state) *
 FROM x
ORDER BY state, date DESC;
?
Потому что в этом случае у меня всё будет отсортировано по state. А мне надо, чтобы было отсортировано по date
источник