āĻāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻĄāĻŋāĻŦāĻŋāĻāĻŽāĻāĻ¸ āĻāĻāĻ āĻ¨ā§āĻ¤āĻŋāĻ¤ā§ āĻāĻžāĻ āĻāĻ°ā§ - "āĻ¤āĻžāĻ°āĻž āĻāĻŽāĻžāĻā§ āĻāĻ¨āĻ¨ āĻāĻ°āĻ¤ā§ āĻŦāĻ˛ā§āĻāĻŋāĻ˛, āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻāĻ¨āĻ¨ āĻāĻ°āĻŋ"āĨ¤ āĻāĻĒāĻ¨āĻžāĻ° āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻļā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻā§āĻ˛āĻŋāĻā§ āĻ§ā§āĻ° āĻāĻ°ā§ āĻĻāĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻž, āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ°ā§āĻ° āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻŦā§ āĻ¸āĻŽāĻā§āĻ° āĻĄāĻžāĻāĻžāĻŦā§āĻ¸āĻā§ "āĻĄā§āĻ°āĻĒ" āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻŽā§āĻŽāĻ°āĻŋ "āĻāĻžāĻā§āĻā§"āĨ¤ āĻ
āĻ¸ā§āĻŽ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻ¸ā§āĻ°āĻā§āĻˇāĻž - āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻ¨āĻŋāĻā§āĻ āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦāĨ¤
PostgreSQL-āĻ, āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻŽā§āĻ˛āĻ āĻĒā§āĻ°āĻļā§āĻ¨āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž WITH RECURSIVE
āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻŽā§āĻ˛āĻ āĻĒā§āĻ°āĻļā§āĻ¨ āĻ˛āĻŋāĻāĻŦā§āĻ¨ āĻ¨āĻž
āĻāĻŦāĻ āĻ¨āĻ¨-āĻ°āĻŋāĻāĻžāĻ°āĻ¸āĻŋāĻ āĻ˛āĻŋāĻā§āĻ¨āĨ¤ āĻŦāĻŋāĻ¨ā§āĻ¤, āĻāĻĒāĻ¨āĻžāĻ° K.O.
āĻāĻ¸āĻ˛ā§, PostgreSQL āĻāĻĒāĻ¨āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŽāĻ¨ āĻ āĻ¨ā§āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻ¨āĻž āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°ā§āĻ¨āĨ¤
āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŽā§āĻ˛āĻŋāĻāĻāĻžāĻŦā§ āĻāĻŋāĻ¨ā§āĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨
āĻāĻāĻ¨āĻ āĻāĻāĻ¨āĻ āĻāĻĒāĻ¨āĻŋ "āĻāĻŋāĻ¨ā§āĻ¨ āĻĻāĻŋāĻ" āĻĨā§āĻā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻŽāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻ¨ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ° āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĻāĻŋāĻ¯āĻŧā§āĻāĻŋ
WITH RECURSIVE src AS (
SELECT '{2,3,5,7,11,13,17,19}'::integer[] arr
)
, T(i, val) AS (
SELECT
1::bigint
, 1
UNION ALL
SELECT
i + 1
, val * arr[i]
FROM
T
, src
WHERE
i <= array_length(arr, 1)
)
SELECT
val
FROM
T
ORDER BY -- ĐžŅйОŅ ŅиĐŊĐ°ĐģŅĐŊĐžĐŗĐž ŅĐĩСŅĐģŅŅĐ°ŅĐ°
i DESC
LIMIT 1;
āĻāĻ āĻ āĻ¨ā§āĻ°ā§āĻ§āĻāĻŋ āĻāĻŖāĻŋāĻ¤ āĻŦāĻŋāĻļā§āĻˇāĻā§āĻāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻĻāĻŋāĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
WITH src AS (
SELECT unnest('{2,3,5,7,11,13,17,19}'::integer[]) prime
)
SELECT
exp(sum(ln(prime)))::integer val
FROM
src;
āĻ˛ā§āĻĒā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ generate_series āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨
āĻ§āĻ°āĻž āĻ¯āĻžāĻ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻāĻĒāĻ¸āĻ°ā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻāĻžāĻāĻāĻŋāĻ° āĻŽā§āĻā§āĻŽā§āĻāĻŋ āĻšāĻ¯āĻŧā§āĻāĻŋ 'abcdefgh'
:
WITH RECURSIVE T AS (
SELECT 'abcdefgh' str
UNION ALL
SELECT
substr(str, 1, length(str) - 1)
FROM
T
WHERE
length(str) > 1
)
TABLE T;
āĻāĻĒāĻ¨āĻŋ āĻāĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻ¯ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻžāĻ¨ā§ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨?... āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨ LATERAL
и generate_series
, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻĒāĻ¨āĻžāĻ° CTE-āĻāĻ°āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§ āĻ¨āĻž:
SELECT
substr(str, 1, ln) str
FROM
(VALUES('abcdefgh')) T(str)
, LATERAL(
SELECT generate_series(length(str), 1, -1) ln
) X;
āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻāĻ āĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨
āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻā§ āĻĢā§āĻ°āĻžāĻŽā§āĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸āĻžāĻ°āĻŖā§ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻā§ āĻāĻžāĻā§ āĻ¸āĻžāĻĄāĻŧāĻž āĻĻāĻŋāĻ¯āĻŧā§āĻā§, āĻ
āĻĨāĻŦāĻž āĻāĻāĻāĻŋ āĻĨā§āĻ°ā§āĻĄ
CREATE TABLE message(
message_id
uuid
PRIMARY KEY
, reply_to
uuid
REFERENCES message
, body
text
);
CREATE INDEX ON message(reply_to);
āĻ āĻŋāĻ āĻāĻā§, āĻāĻāĻāĻŋ āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻāĻāĻ°āĻāĻŽ āĻāĻŋāĻā§ āĻĻā§āĻāĻžāĻ¯āĻŧ:
WITH RECURSIVE T AS (
SELECT
*
FROM
message
WHERE
message_id = $1
UNION ALL
SELECT
m.*
FROM
T
JOIN
message m
ON m.reply_to = T.message_id
)
TABLE T;
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧāĻ āĻ°ā§āĻ āĻŽā§āĻ¸ā§āĻ āĻĨā§āĻā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻĒāĻŋāĻ āĻĻāĻ°āĻāĻžāĻ°, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻā§āĻ¨ āĻāĻ°āĻŋ āĻ¨āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻāĻ¨ā§āĻā§āĻ°āĻŋāĻ¤ā§ āĻ¤āĻžāĻ° āĻāĻāĻĄāĻŋ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ?
-- дОйавиĐŧ ĐŋĐžĐģĐĩ Ņ ОйŅиĐŧ идĐĩĐŊŅиŅиĐēĐ°ŅĐžŅĐžĐŧ ŅĐĩĐŧŅ и иĐŊĐ´ĐĩĐēŅ ĐŊĐ° ĐŊĐĩĐŗĐž
ALTER TABLE message
ADD COLUMN theme_id uuid;
CREATE INDEX ON message(theme_id);
-- иĐŊиŅиаĐģиСиŅŅĐĩĐŧ идĐĩĐŊŅиŅиĐēĐ°ŅĐžŅ ŅĐĩĐŧŅ в ŅŅиĐŗĐŗĐĩŅĐĩ ĐŋŅи вŅŅавĐēĐĩ
CREATE OR REPLACE FUNCTION ins() RETURNS TRIGGER AS $$
BEGIN
NEW.theme_id = CASE
WHEN NEW.reply_to IS NULL THEN NEW.message_id -- ĐąĐĩŅĐĩĐŧ иС ŅŅĐ°ŅŅОвОĐŗĐž ŅОйŅŅиŅ
ELSE ( -- иĐģи иС ŅООйŅĐĩĐŊиŅ, ĐŊĐ° ĐēĐžŅĐžŅĐžĐĩ ĐžŅвĐĩŅĐ°ĐĩĐŧ
SELECT
theme_id
FROM
message
WHERE
message_id = NEW.reply_to
)
END;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER ins BEFORE INSERT
ON message
FOR EACH ROW
EXECUTE PROCEDURE ins();
āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻŋāĻ¤ā§ āĻšā§āĻ°āĻžāĻ¸ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
SELECT
*
FROM
message
WHERE
theme_id = $1;
āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž "āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻž" āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨
āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻā§āĻ¨ā§ āĻāĻžāĻ°āĻŖā§ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻāĻ āĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻ¨āĻž āĻĒāĻžāĻ°āĻŋ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻ¸ā§āĻ¨ āĻĻā§āĻāĻŋ āĻāĻŽāĻ°āĻž āĻāĻŋāĻ¸ā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯āĻžāĻ¤ā§ āĻĄā§āĻāĻžāĻ¤ā§ āĻā§āĻ¨ā§ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ āĻ āĻŦāĻŋāĻ°āĻžāĻŽ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻ° āĻĻāĻŋāĻā§ āĻ¨āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤
āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻāĻā§āĻ°āĻ¤āĻž āĻāĻžāĻāĻ¨ā§āĻāĻžāĻ°
āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻ§āĻžāĻĒā§ āĻāĻāĻāĻŋ āĻāĻ°ā§ āĻāĻžāĻāĻ¨ā§āĻāĻžāĻ° āĻŦāĻžāĻĄāĻŧāĻžāĻ āĻ¯āĻ¤āĻā§āĻˇāĻŖ āĻ¨āĻž āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ¸ā§āĻŽāĻžāĻ¤ā§ āĻ¨āĻž āĻĒā§āĻāĻāĻžāĻ āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻ¸ā§āĻĒāĻˇā§āĻāĻ¤āĻ āĻ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻāĻ°āĻŋ:
WITH RECURSIVE T AS (
SELECT
0 i
...
UNION ALL
SELECT
i + 1
...
WHERE
T.i < 64 -- ĐŋŅĐĩĐ´ĐĩĐģ
)
āĻĒā§āĻ°ā§: āĻ¯āĻāĻ¨ āĻāĻŽāĻ°āĻž āĻ˛ā§āĻĒ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ, āĻ¤āĻāĻ¨āĻ āĻāĻŽāĻ°āĻž "āĻāĻā§āĻ°āĻ¤āĻžāĻ°" āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸ā§āĻŽāĻžāĻ° āĻŦā§āĻļāĻŋ āĻāĻŋāĻā§ āĻāĻ°āĻŦ āĻ¨āĻžāĨ¤
āĻāĻ¨āĻ¸: āĻā§āĻ¨ āĻā§āĻ¯āĻžāĻ°āĻžāĻ¨ā§āĻāĻŋ āĻ¨ā§āĻ āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻāĻāĻ āĻ°ā§āĻāĻ°ā§āĻĄ āĻāĻŦāĻžāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻŦ āĻ¨āĻž - āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, 15 āĻāĻŦāĻ 25 āĻāĻ° āĻāĻā§āĻ°āĻ¤āĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻĒā§āĻ°āĻ¤āĻŋ +10āĨ¤ āĻāĻŦāĻ āĻā§āĻ "āĻĒā§āĻ°āĻ¸ā§āĻĨ" āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŋāĻā§ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĻā§āĻ¯āĻŧāĻ¨āĻŋāĨ¤
āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻāĻāĻžāĻŦā§, āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻ āĻ¸ā§āĻŽ āĻšāĻŦā§ āĻ¨āĻž, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ§āĻžāĻĒā§ āĻ°ā§āĻāĻ°ā§āĻĄā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻĻā§āĻ°ā§āĻ¤āĻāĻ¤āĻŋāĻ¤ā§ āĻŦā§āĻĻā§āĻ§āĻŋ āĻĒāĻžāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻ¸āĻŦāĻžāĻ āĻāĻžāĻ˛ā§āĻāĻžāĻŦā§ āĻāĻžāĻ¨āĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻŋ āĻļā§āĻˇ āĻšāĻ¯āĻŧ...
"āĻĒāĻĨā§āĻ°" āĻ āĻāĻŋāĻāĻžāĻŦāĻ
āĻāĻŽāĻ°āĻž āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧāĻā§āĻ°āĻŽā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ āĻŦāĻā§āĻā§āĻ āĻāĻāĻĄā§āĻ¨ā§āĻāĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ°āĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻ°ā§āĻ¤ā§ āĻ°āĻŋāĻāĻžāĻ°āĻļāĻ¨ āĻĒāĻžāĻĨ āĻŦāĻ°āĻžāĻŦāĻ° āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻŋ, āĻ¯āĻž āĻāĻāĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻ āĻ¨āĻ¨ā§āĻ¯ "āĻĒāĻžāĻĨ":
WITH RECURSIVE T AS (
SELECT
ARRAY[id] path
...
UNION ALL
SELECT
path || id
...
WHERE
id <> ALL(T.path) -- ĐŊĐĩ ŅОвĐŋĐ°Đ´Đ°ĐĩŅ ĐŊи Ņ ОдĐŊиĐŧ иС
)
āĻĒā§āĻ°ā§: āĻ¯āĻĻāĻŋ āĻĄā§āĻāĻžāĻ¤ā§ āĻāĻāĻāĻŋ āĻāĻā§āĻ° āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻāĻŽāĻ°āĻž āĻāĻāĻ āĻĒāĻĨā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻ āĻ°ā§āĻāĻ°ā§āĻĄ āĻŦāĻžāĻ°āĻŦāĻžāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻŦ āĻ¨āĻžāĨ¤
āĻāĻ¨āĻ¸: āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻ āĻ¸āĻŽāĻ¯āĻŧā§, āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻā§āĻĻā§āĻ° āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻ¨āĻž āĻāĻ°ā§ āĻāĻā§āĻˇāĻ°āĻŋāĻāĻāĻžāĻŦā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ°ā§āĻāĻ°ā§āĻĄ āĻŦāĻžāĻāĻĒāĻžāĻ¸ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤
āĻĒāĻĨā§āĻ° āĻĻā§āĻ°ā§āĻā§āĻ¯ āĻ¸ā§āĻŽāĻž
āĻāĻāĻāĻŋ āĻŦā§āĻ§āĻāĻŽā§āĻ¯ āĻāĻā§āĻ°āĻ¤āĻžāĻ¯āĻŧ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻ° āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻāĻĄāĻŧāĻžāĻ¤ā§, āĻāĻŽāĻ°āĻž āĻāĻā§āĻ° āĻĻā§āĻāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻ āĻĨāĻŦāĻž, āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻā§āĻˇā§āĻ¤ā§āĻ°āĻā§āĻ˛āĻŋāĻā§ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°āĻ¤ā§ āĻ¨āĻž āĻāĻžāĻ, āĻ¤āĻžāĻšāĻ˛ā§ āĻĒāĻĨā§āĻ° āĻĻā§āĻ°ā§āĻā§āĻ¯ā§āĻ° āĻ āĻ¨ā§āĻŽāĻžāĻ¨ āĻ¸āĻš āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻāĻžāĻ˛āĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻžāĻ° āĻļāĻ°ā§āĻ¤ā§āĻ° āĻĒāĻ°āĻŋāĻĒā§āĻ°āĻ āĻāĻ°ā§āĻ¨:
WITH RECURSIVE T AS (
SELECT
ARRAY[id] path
...
UNION ALL
SELECT
path || id
...
WHERE
id <> ALL(T.path) AND
array_length(T.path, 1) < 10
)
āĻāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻŦāĻžāĻĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻ¯āĻŧāĻ¨ āĻāĻ°ā§āĻ¨!
āĻāĻ¤ā§āĻ¸: www.habr.com