postgresqlfunctions
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
postgresqlfunctions [2022/11/23 14:52] – created z0hpvk | postgresqlfunctions [2025/03/08 22:24] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== SQL and PL/pgSQL ===== | ||
+ | |||
+ | ==== JSON ==== | ||
+ | [[https:// | ||
+ | |||
+ | ==== Arrays ==== | ||
+ | |||
+ | Arrays can be displayed as '' | ||
+ | |||
+ | === Operators === | ||
+ | <code SQL> | ||
+ | SELECT 1 WHERE ' | ||
+ | SELECT 1 WHERE ' | ||
+ | -- Does each element appearing in the 2nd array equal some element of the 1st array | ||
+ | SELECT ARRAY[1, | ||
+ | SELECT ARRAY[1, | ||
+ | -- Does each element appearing in the 1st array equal some element of the 2nd array | ||
+ | SELECT ARRAY[1,3] <@ ARRAY[1, | ||
+ | SELECT ARRAY[1, | ||
+ | -- Do the arrays have any elements in common. | ||
+ | SELECT ARRAY[1, | ||
+ | SELECT ARRAY[1, | ||
+ | </ | ||
+ | |||
+ | === Append / Prepend === | ||
+ | <code SQL> | ||
+ | SELECT ARRAY[1, | ||
+ | SELECT array_append(ARRAY[1, | ||
+ | |||
+ | SELECT 0 || ARRAY[1, | ||
+ | SELECT array_prepend(0, | ||
+ | </ | ||
+ | |||
+ | === Replace / Remove === | ||
+ | <code SQL> | ||
+ | SELECT array_replace(ARRAY[1, | ||
+ | SELECT array_remove(ARRAY[1, | ||
+ | </ | ||
+ | |||
+ | === Concatenate === | ||
+ | <code SQL> | ||
+ | SELECT ARRAY[1, | ||
+ | SELECT 0 || ARRAY[1, | ||
+ | SELECT array_cat(ARRAY[0], | ||
+ | </ | ||
+ | |||
+ | === Length === | ||
+ | <code SQL> | ||
+ | SELECT array_length(ARRAY[1, | ||
+ | SELECT cardinality(ARRAY[1, | ||
+ | </ | ||
+ | |||
+ | === Position === | ||
+ | <code SQL> | ||
+ | SELECT array_position(ARRAY[1, | ||
+ | SELECT array_positions(ARRAY[1, | ||
+ | </ | ||
+ | |||
+ | === Conversion === | ||
+ | <code SQL> | ||
+ | SELECT array_to_string(ARRAY[1, | ||
+ | SELECT unnest(ARRAY[1, | ||
+ | SELECT generate_subscripts(ARRAY[' | ||
+ | |||
+ | --Convert text column with comma separated values to array | ||
+ | ALTER TABLE name_basics ALTER primaryprofession TYPE text[] | ||
+ | USING string_to_array(primaryprofession, | ||
+ | </ | ||
+ | |||
+ | ==== Hierarchical Data ==== | ||
+ | <code SQL> | ||
+ | WITH RECURSIVE t1(n) AS ( | ||
+ | VALUES (0) | ||
+ | UNION ALL | ||
+ | SELECT n+1 FROM t1 WHERE n < 5) | ||
+ | SELECT * FROM t1; | ||
+ | </ | ||
+ | |||
+ | <code SQL> | ||
+ | CREATE TABLE family (key int, parent_key int, name text); | ||
+ | INSERT INTO family VALUES (1, null, ' | ||
+ | INSERT INTO family VALUES (2, 1, ' | ||
+ | INSERT INTO family VALUES (3, 2, ' | ||
+ | INSERT INTO family VALUES (4, 2, ' | ||
+ | INSERT INTO family VALUES (5, 3, ' | ||
+ | INSERT INTO family VALUES (6, 3, ' | ||
+ | INSERT INTO family VALUES (7, 5, ' | ||
+ | INSERT INTO family VALUES (8, 1, ' | ||
+ | INSERT INTO family VALUES (9, 8, ' | ||
+ | INSERT INTO family VALUES (10, 8, ' | ||
+ | </ | ||
+ | |||
+ | <code SQL> | ||
+ | WITH RECURSIVE a AS ( | ||
+ | SELECT key, parent_key, name, 1::integer level, ARRAY[key] path, ' ' indent, | ||
+ | CASE WHEN EXISTS (SELECT 1 FROM family f2 WHERE f2.parent_key = f1.key ) | ||
+ | THEN 0 ELSE 1 END is_leaf | ||
+ | FROM | ||
+ | WHERE parent_key IS NULL | ||
+ | UNION ALL | ||
+ | SELECT b.key, b.parent_key, | ||
+ | CASE WHEN EXISTS (SELECT 1 FROM family f2 WHERE f2.parent_key = b.key ) | ||
+ | THEN 0 ELSE 1 END is_leaf | ||
+ | FROM | ||
+ | JOIN a ON a.key = b.parent_key ) | ||
+ | SELECT key, parent_key, name, level, path, is_leaf FROM a ORDER BY path; | ||
+ | </ | ||
+ | |||
+ | ==== Templates ==== | ||
+ | |||
+ | === Functions === | ||
< | < | ||
- | CREATE OR REPLACE FUNCTION | + | CREATE |
+ | RETURNS | ||
+ | | ||
+ | AS $$ | ||
+ | DECLARE | ||
+ | -- Variables | ||
+ | BEGIN | ||
+ | -- Logic | ||
+ | END; $$ | ||
+ | </ | ||
+ | |||
+ | === Procedures === | ||
+ | < | ||
+ | CREATE [OR REPLACE] PROCEDURE prc_nme() | ||
+ | LANGUAGE plpgsql | ||
AS $$ | AS $$ | ||
- | # | ||
DECLARE | DECLARE | ||
- | kpv_id int; | + | -- Variables |
BEGIN | BEGIN | ||
- | SELECT key_point_values.id INTO STRICT kpv_id | + | -- Body |
- | FROM key_point_values WHERE key_point_values.name | + | END; $$ |
- | | + | </ |
- | END; | + | |
- | $$ LANGUAGE plpgsql; | + | === If Then Else === |
+ | < | ||
+ | IF condition_1 THEN | ||
+ | statement_1; | ||
+ | ELSIF condition_n THEN | ||
+ | statement_n; | ||
+ | ELSE | ||
+ | else-statement; | ||
+ | END IF; | ||
+ | </ | ||
+ | |||
+ | === Case === | ||
+ | < | ||
+ | CASE RATE | ||
+ | WHEN ' | ||
+ | WHEN ' | ||
+ | ELSE PRICE_SEGMENT = 0; | ||
+ | END CASE; | ||
+ | |||
+ | CASE | ||
+ | WHEN total > 200 THEN variable = ' | ||
+ | WHEN total > 100 THEN variable = ' | ||
+ | ELSE variable = ' | ||
+ | END CASE; | ||
+ | </ | ||
+ | |||
+ | === Loop === | ||
+ | < | ||
+ | LOOP | ||
+ | -- Statements | ||
+ | IF condition THEN | ||
+ | EXIT; | ||
+ | END IF; | ||
+ | END LOOP; | ||
+ | |||
+ | WHILE CONDITION LOOP | ||
+ | -- Statements; | ||
+ | END LOOP; | ||
+ | |||
+ | FOR loop_counter in [ reverse ] FROM.. TO [ by step ] LOOP | ||
+ | -- Statements | ||
+ | END LOOP | ||
</ | </ |
postgresqlfunctions.1669215167.txt.gz · Last modified: 2025/03/08 22:23 (external edit)