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: (external edit)
