āĻāĻ SQL āĻ āĻā§āĻ¨ āĻāĻāĻŋāĻ˛ āĻā§āĻ¸ āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻļā§āĻ˛āĻŋāĻ¤ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻĨāĻžāĻāĻŦā§ āĻ¨āĻžāĨ¤ āĻ¸āĻŦāĻāĻŋāĻā§ āĻā§āĻŦ āĻ¸āĻšāĻ āĻšāĻŦā§, āĻā§āĻ¯āĻžāĻĒā§āĻā§āĻ¨ āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¸ā§āĻ¤āĻ°ā§ - āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋ āĻāĻ°āĻŋ āĻāĻā§āĻ¨ā§āĻ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ āĻĻā§āĻāĻž āĻ¸āĻŽāĻ¯āĻŧ āĻ āĻ¨ā§āĻ¸āĻžāĻ°ā§ āĻ¸āĻžāĻāĻžāĻ¨ā§āĨ¤
āĻ
āĻ°ā§āĻĨāĻžā§ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§ āĻāĻāĻāĻŋ āĻāĻŋāĻšā§āĻ¨ āĻ°āĻ¯āĻŧā§āĻā§ events
, āĻāĻŦāĻ āĻ¤āĻžāĻ° āĻāĻāĻāĻŋ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻāĻā§ ts
- āĻ āĻŋāĻ āĻ¯ā§ āĻ¸āĻŽāĻ¯āĻŧā§ āĻāĻŽāĻ°āĻž āĻāĻ āĻ°ā§āĻāĻ°ā§āĻĄāĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻļā§āĻā§āĻāĻ˛āĻāĻžāĻŦā§ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ:
CREATE TABLE events(
id
serial
PRIMARY KEY
, ts
timestamp
, data
json
);
CREATE INDEX ON events(ts DESC);
āĻāĻāĻž āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻ āĻĄāĻāĻ¨ āĻ°ā§āĻāĻ°ā§āĻĄ āĻĨāĻžāĻāĻŦā§ āĻ¨āĻž, āĻ¤āĻžāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŋāĻā§ āĻĢāĻ°ā§āĻŽā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§ āĻĒā§āĻˇā§āĻ āĻž āĻ¨ā§āĻāĻŋāĻā§āĻļāĻ¨.
#0 "āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ° āĻŽāĻžāĻ¯āĻŧā§āĻ° āĻĒā§āĻā§āĻ°ā§āĻŽāĻŋāĻ¸ā§āĻ"
cur.execute("SELECT * FROM events;")
rows = cur.fetchall();
rows.sort(key=lambda row: row.ts, reverse=True);
limit = 26
print(rows[offset:offset+limit]);
āĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻ°āĻ¸āĻŋāĻāĻ¤āĻž āĻ¨āĻ¯āĻŧ - āĻāĻāĻŋ āĻŦāĻŋāĻ°āĻ˛, āĻ¤āĻŦā§ āĻŦāĻ¨ā§āĻ¯ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻāĻāĻ¨āĻ āĻāĻāĻ¨āĻ, ORM-āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, SQL āĻāĻ° āĻ¸āĻžāĻĨā§ "āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ" āĻāĻžāĻā§ āĻ¸ā§āĻ¯ā§āĻāĻ āĻāĻ°āĻž āĻāĻ āĻŋāĻ¨ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻ¤āĻŦā§ āĻāĻ¸ā§āĻ¨ āĻāĻ°āĻ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻāĻŦāĻ āĻāĻŽ āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻĻāĻŋāĻā§ āĻāĻāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĨ¤
#1 āĻ āĻĢāĻ¸ā§āĻ
SELECT
...
FROM
events
ORDER BY
ts DESC
LIMIT 26 OFFSET $1; -- 26 - СаĐŋиŅĐĩĐš ĐŊĐ° ŅŅŅĐ°ĐŊиŅĐĩ, $1 - ĐŊĐ°ŅĐ°ĐģĐž ŅŅŅĐ°ĐŊиŅŅ
26 āĻ¨āĻŽā§āĻŦāĻ°āĻāĻŋ āĻā§āĻĨāĻž āĻĨā§āĻā§ āĻāĻ¸ā§āĻā§? āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°ā§āĻ¨ āĻĒā§āĻ°āĻŖ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ¨ā§āĻā§āĻ°āĻŋāĻ° āĻāĻ¨ā§āĻŽāĻžāĻ¨āĻŋāĻ āĻ¸āĻāĻā§āĻ¯āĻžāĨ¤ āĻāĻ°āĻ āĻ¸ā§āĻĒāĻˇā§āĻāĻāĻžāĻŦā§, 25āĻāĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻ°ā§āĻāĻ°ā§āĻĄ, āĻĒā§āĻ˛āĻžāĻ¸ 1, āĻāĻā§āĻāĻŋāĻ¤ āĻĻā§āĻ¯āĻŧ āĻ¯ā§ āĻ¨āĻŽā§āĻ¨āĻžāĻ¯āĻŧ āĻāĻ°āĻ āĻāĻŋāĻā§ āĻāĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻžāĻ° āĻ āĻ°ā§āĻĨāĻŦā§āĻ§ āĻāĻ°ā§āĨ¤
āĻ āĻŦāĻļā§āĻ¯āĻ, āĻāĻ āĻŽāĻžāĻ¨āĻāĻŋ āĻ āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻŽā§āĻ˛ āĻ āĻāĻļā§ "āĻ¸ā§āĻ˛āĻžāĻ" āĻāĻ°āĻž āĻ¯āĻžāĻŦā§ āĻ¨āĻž, āĻ¤āĻŦā§ āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻ¯āĻžāĻŦā§āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, PostgreSQL āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§āĻā§ āĻ¤ā§āĻ˛āĻ¨āĻžāĻŽā§āĻ˛āĻāĻāĻžāĻŦā§ āĻāĻŽ āĻ°ā§āĻāĻ°ā§āĻĄ āĻĨāĻžāĻāĻž āĻāĻāĻŋāĻ¤ āĻāĻŽāĻ¨ āĻā§āĻāĻžāĻ¨ā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°āĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻŦā§ āĻ¨āĻž - āĻāĻŦāĻ āĻ¸āĻšāĻā§āĻ āĻāĻāĻāĻŋ āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻž āĻŦā§āĻā§ āĻ¨ā§āĻŦā§āĨ¤
āĻāĻŦāĻ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§ āĻĨāĻžāĻāĻžāĻāĻžāĻ˛ā§āĻ¨, āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ āĻĻā§āĻāĻžāĻ° āĻāĻŋāĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ˛ "āĻĒā§āĻˇā§āĻ āĻžāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸ā§āĻ¯ā§āĻāĻāĻŋāĻ" āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻĻā§āĻ°ā§āĻ āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ āĻ¸āĻ¨ā§āĻĻā§āĻšāĻāĻ¨āĻ āĻāĻŋāĻā§ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻ āĻŋāĻ āĻ¸ā§āĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¯āĻāĻ¨, āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻāĻā§āĻ°āĻžāĻŽā§, UI/UX āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸āĻāĻŋāĻā§ "āĻ āĻ¨ā§āĻ¤āĻšā§āĻ¨ āĻ¸ā§āĻā§āĻ°ā§āĻ˛"-āĻ āĻ°āĻŋāĻŽā§āĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨ā§āĻ¯āĻŧ - āĻ āĻ°ā§āĻĨāĻžā§, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻāĻāĻāĻŋ āĻāĻāĻ āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻ¯āĻŧ āĻāĻāĻāĻž āĻšāĻ¯āĻŧ āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻāĻĒāĻ°ā§ āĻāĻŦāĻ āĻ¨ā§āĻā§ āĻ¸ā§āĻā§āĻ°ā§āĻ˛ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻŦāĻ āĻ¤āĻžāĻ, āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻĒāĻ¨āĻŋ āĻ§āĻ°āĻž āĻĒāĻĄāĻŧā§āĻ¨ āĻ°ā§āĻāĻ°ā§āĻĄā§āĻ° āĻ¨āĻāĻ˛ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻ¤ā§ āĻā§āĻ¨, āĻāĻžāĻ°āĻŖ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻ¸ā§āĻāĻ āĻāĻā§ (ts)
, āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§?
āĻ āĻŋāĻ āĻāĻžāĻ°āĻŖ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻžāĻ¯āĻŧ āĻ¨ā§āĻ¨āĻ¨āĻŋ ts
āĻāĻāĻāĻŋ āĻ
āĻ¨āĻ¨ā§āĻ¯ āĻā§ āĻ¨āĻ¯āĻŧ āĻāĻ āĻā§āĻŦāĻŋāĻ˛ā§ āĻāĻ¸āĻ˛ā§, āĻāĻŦāĻ āĻāĻ° āĻŽāĻžāĻ¨ āĻ
āĻ¨āĻ¨ā§āĻ¯ āĻ¨āĻ¯āĻŧ, āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻ
āĻŦāĻ¸ā§āĻĨāĻžāĻ° āĻ¯ā§āĻā§āĻ¨ā§ "āĻ¸āĻŽāĻ¯āĻŧ" āĻāĻ° āĻŽāĻ¤ā§ - āĻ¤āĻžāĻ, āĻāĻāĻ āĻā§ āĻŽāĻžāĻ¨ āĻŦāĻžāĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻāĻŋāĻ¨ā§āĻ¨ āĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻāĻĻā§āĻļā§āĻ° āĻāĻžāĻ°āĻŖā§ āĻĻā§āĻāĻŋ āĻ¸āĻāĻ˛āĻā§āĻ¨ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻāĻāĻ āĻ°ā§āĻāĻ°ā§āĻĄ āĻ¸āĻšāĻā§āĻ āĻĒā§āĻˇā§āĻ āĻž āĻĨā§āĻā§ āĻĒā§āĻˇā§āĻ āĻžāĻ¯āĻŧ "āĻāĻžāĻŽā§āĻĒ" āĻāĻ°ā§ā§ˇ
āĻāĻ¸āĻ˛ā§, āĻāĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ˛ā§āĻāĻŋāĻ¯āĻŧā§ āĻāĻā§, āĻ¯āĻž āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°āĻž āĻ
āĻ¨ā§āĻ āĻŦā§āĻļāĻŋ āĻāĻ āĻŋāĻ¨ - āĻāĻŋāĻā§ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻĻā§āĻāĻžāĻ¨ā§ āĻšāĻŦā§ āĻ¨āĻž āĻŽā§āĻā§āĻ! āĻ¸āĻ°ā§āĻŦā§āĻĒāĻ°āĻŋ, "āĻĄā§āĻĒā§āĻ˛āĻŋāĻā§āĻ" āĻ°ā§āĻāĻ°ā§āĻĄāĻā§āĻ˛āĻŋ āĻ
āĻ¨ā§āĻ¯ āĻāĻžāĻ°āĻ āĻāĻžāĻ¯āĻŧāĻāĻž āĻ¨āĻŋāĻ¯āĻŧā§āĻā§āĨ¤ āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻāĻŦāĻŋāĻ¸āĻš āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§
āĻ¸ā§āĻāĻ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤
āĻāĻāĻāĻ¨ āĻ§ā§āĻ°ā§āĻ¤ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻŦā§āĻā§āĻ¨ āĻ¯ā§ āĻ¸ā§āĻāĻ āĻā§āĻāĻŋāĻā§ āĻ āĻ¨āĻ¨ā§āĻ¯ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻāĻŦāĻ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ¸āĻšāĻ āĻāĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻĒāĻˇā§āĻāĻāĻžāĻŦā§ āĻ āĻ¨āĻ¨ā§āĻ¯ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻĻāĻŋāĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻāĻ°āĻž, āĻ¯āĻžāĻ° āĻāĻ¨ā§āĻ¯ PK āĻāĻĒāĻ¯ā§āĻā§āĻ¤:
CREATE UNIQUE INDEX ON events(ts DESC, id DESC);
āĻāĻŦāĻ āĻ āĻ¨ā§āĻ°ā§āĻ§āĻāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°ā§:
SELECT
...
ORDER BY
ts DESC, id DESC
LIMIT 26 OFFSET $1;
#2 "āĻāĻžāĻ°ā§āĻ¸āĻžāĻ°" āĻ āĻ¸ā§āĻ¯ā§āĻāĻ āĻāĻ°ā§āĻ¨
āĻāĻŋāĻā§ āĻ¸āĻŽāĻ¯āĻŧ āĻĒāĻ°ā§, āĻāĻāĻāĻ¨ DBA āĻāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻā§ āĻāĻ¸ā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻ
āĻ¨ā§āĻ°ā§āĻ§ā§ "āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻ" āĻšāĻ¯āĻŧ
SELECT
...
WHERE
(ts, id) < ($1, $2) -- ĐŋĐžŅĐģĐĩĐ´ĐŊиĐĩ ĐŋĐžĐģŅŅĐĩĐŊĐŊŅĐĩ ĐŊĐ° ĐŋŅĐĩĐ´ŅĐ´ŅŅĐĩĐŧ ŅĐ°ĐŗĐĩ СĐŊĐ°ŅĐĩĐŊиŅ
ORDER BY
ts DESC, id DESC
LIMIT 26;
āĻāĻāĻž āĻ¨āĻž āĻāĻ¸āĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻĒāĻ¨āĻŋ āĻ¸ā§āĻŦāĻ¸ā§āĻ¤āĻŋāĻ° āĻ¨āĻŋāĻāĻļā§āĻŦāĻžāĻ¸ āĻĢā§āĻ˛ā§āĻā§āĻ¨...
#3āĨ¤ āĻ¸ā§āĻā§ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻž
āĻāĻžāĻ°āĻŖ āĻāĻāĻĻāĻŋāĻ¨ āĻ¤ā§āĻŽāĻžāĻ° āĻĄāĻŋāĻŦāĻŋāĻ āĻĒāĻĄāĻŧā§ (ts DESC)
.
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻĒā§āĻˇā§āĻ āĻžāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ "āĻāĻžāĻŽā§āĻĒāĻŋāĻ" āĻ°ā§āĻāĻ°ā§āĻĄāĻā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻā§ āĻāĻ°āĻŦā§āĻ¨?.. āĻāĻŦāĻ āĻ¸āĻŦāĻāĻŋāĻā§āĻ āĻ¸āĻšāĻ - āĻāĻĒāĻ¨āĻžāĻā§ āĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻāĻā§āĻ¯āĻ āĻ°ā§āĻāĻ°ā§āĻĄ āĻ¸āĻš āĻŦā§āĻ˛āĻ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§!
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§, āĻā§ āĻāĻŽāĻžāĻĻā§āĻ°āĻā§ "āĻ āĻŋāĻ 26" āĻ¨āĻ¯āĻŧ, āĻāĻŋāĻ¨ā§āĻ¤ā§ "26 āĻāĻ° āĻāĻŽ āĻ¨āĻ¯āĻŧ" āĻĒāĻĄāĻŧāĻ¤ā§ āĻ¨āĻŋāĻˇā§āĻ§ āĻāĻ°ā§? āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻ¯āĻžāĻ¤ā§ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻŦā§āĻ˛āĻā§ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¸ā§āĻĒāĻˇā§āĻāĻ¤āĻ āĻāĻŋāĻ¨ā§āĻ¨ āĻ
āĻ°ā§āĻĨ āĻ¸āĻš āĻ°ā§āĻāĻ°ā§āĻĄ ts
- āĻ¤āĻžāĻšāĻ˛ā§ āĻŦā§āĻ˛āĻāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ "āĻāĻžāĻŽā§āĻĒāĻŋāĻ" āĻ°ā§āĻāĻ°ā§āĻĄāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻ¨āĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻŦā§ āĻ¨āĻž!
āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻ āĻ°ā§āĻāĻ¨ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻž āĻāĻāĻžāĻ¨ā§:
SELECT
...
WHERE
ts < $1 AND
ts >= coalesce((
SELECT
ts
FROM
events
WHERE
ts < $1
ORDER BY
ts DESC
LIMIT 1 OFFSET 25
), '-infinity')
ORDER BY
ts DESC;
āĻāĻāĻžāĻ¨ā§ āĻāĻŋ āĻšāĻā§āĻā§?
- āĻāĻŽāĻ°āĻž 25 āĻ§āĻžāĻĒ "āĻ¨āĻŋāĻā§" āĻ°ā§āĻāĻ°ā§āĻĄ āĻāĻ°āĻŋ āĻāĻŦāĻ "āĻ¸ā§āĻŽāĻžāĻ¨āĻž" āĻŽāĻžāĻ¨ āĻĒāĻžāĻ
ts
. - āĻ¯āĻĻāĻŋ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻŋāĻā§ āĻ¨āĻž āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ NULL āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨
-infinity
. - āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻŽāĻžāĻ¨ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻŽāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¸ā§āĻāĻŽā§āĻ¨ā§āĻ āĻŦāĻŋāĻ¯āĻŧā§āĻ āĻāĻ°āĻŋ
ts
āĻāĻŦāĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻĨā§āĻā§ āĻĒāĻžāĻ¸ āĻāĻ°āĻž $1 āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° (āĻāĻā§āĻ° "āĻļā§āĻˇ" āĻ°ā§āĻ¨ā§āĻĄāĻžāĻ° āĻāĻ°āĻž āĻŽāĻžāĻ¨)āĨ¤ - āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻ 26āĻāĻŋāĻ° āĻāĻŽ āĻ°ā§āĻāĻ°ā§āĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻĢā§āĻ°āĻ¤ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§ āĻāĻāĻŋ āĻļā§āĻˇāĻāĻŋāĨ¤
āĻŦāĻž āĻāĻāĻ āĻāĻŦāĻŋ:
āĻāĻžāĻ°āĻŖ āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻā§ āĻ¨āĻŽā§āĻ¨āĻžāĻ° āĻā§āĻ¨ā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ "āĻļā§āĻ°ā§" āĻ¨ā§āĻ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŋāĻā§āĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ āĻ āĻ¨ā§āĻ°ā§āĻ§āĻāĻŋāĻā§ āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ āĻĻāĻŋāĻā§ "āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤" āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ "āĻ°ā§āĻĢāĻžāĻ°ā§āĻ¨ā§āĻ¸ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ" āĻĨā§āĻā§ āĻĄāĻžāĻāĻž āĻŦā§āĻ˛āĻā§āĻ° āĻāĻ¤āĻŋāĻļā§āĻ˛ āĻ˛ā§āĻĄāĻŋāĻ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻŦāĻžāĻ§āĻž āĻĻā§āĻ¯āĻŧ āĻ¨āĻž - āĻ¨ā§āĻā§ āĻāĻŦāĻ āĻāĻĒāĻ°ā§ āĻāĻāĻ¯āĻŧ āĻĻāĻŋāĻā§āĨ¤
āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯
- āĻšā§āĻ¯āĻžāĻ, āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻāĻāĻāĻŋ āĻĻā§āĻŦāĻžāĻ° āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻŋ, āĻ¤āĻŦā§ āĻ¸āĻŦāĻāĻŋāĻā§āĻ "āĻļā§āĻĻā§āĻ§āĻāĻžāĻŦā§ āĻ¸ā§āĻāĻ āĻĻā§āĻŦāĻžāĻ°āĻž"āĨ¤ āĻ āĻ¤āĻāĻŦ, āĻāĻāĻāĻŋ subquery āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻšāĻŦā§ āĻāĻāĻāĻŋ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ¸ā§āĻāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨.
- āĻāĻāĻŋ āĻŦā§āĻļ āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¯ā§ āĻāĻ āĻā§āĻļāĻ˛āĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻāĻ¨āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯āĻāĻ¨ āĻāĻĒāĻ¨āĻžāĻ° āĻŽāĻžāĻ¨ āĻĨāĻžāĻā§
ts
āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸ā§āĻ¯ā§āĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ āĻ¤āĻŋāĻā§āĻ°āĻŽ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻŦāĻ āĻ¤āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻŋāĻā§. āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻā§āĻ¸ "00:00:00.000 āĻ āĻāĻ āĻŽāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻ°ā§āĻāĻ°ā§āĻĄ" āĻšāĻ¯āĻŧ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻāĻŋ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻŽāĻŋ āĻŦāĻ˛āĻ¤ā§ āĻāĻžāĻā§āĻāĻŋ, āĻāĻĒāĻ¨āĻžāĻ° āĻāĻŽāĻ¨ āĻāĻāĻ¨āĻž āĻāĻāĻ¤ā§ āĻĻā§āĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻāĻā§ āĻ¤āĻŦā§ āĻāĻāĻāĻŋ āĻŦāĻ°ā§āĻ§āĻŋāĻ¤ āĻ¸ā§āĻāĻ āĻ¸āĻš āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com