Введение в PostgreSQL: слайды от Ильи Альшанецкого (англ.)

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ух ты, я не знал про
PHP:
$db->query("INSERT INTO users (login, passwd) VALUES('login', 'pwd') RETURNING id")->fetchColumn();	//	Get	record	ID
 

~WR~

Новичок
Следующий уровень этой фишки:
http://www.depesz.com/2011/03/16/waiting-for-9-1-writable-cte/

1. Удалить старые записи
2. Посчитать сколько удалили по каждому юзеру
3. Обновить counter'ы

Всё в один запрос.
PHP:
WITH deleted_posts AS (
    DELETE FROM posts
    WHERE created < now() - '6 months'::INTERVAL
    RETURNING *
), deleted_per_user as (
    SELECT user_id, count(*)
    FROM deleted_posts
    GROUP BY 1
)
UPDATE counts
SET posts_count = posts_count - d.count
FROM deleted_per_user d
WHERE d.user_id = counts.user_id;
Работает намного шустрее, чем делать то же самое в три отдельных запроса и гонять данные в приложение.
 
Сверху