Skip to content

Instantly share code, notes, and snippets.

@andrewp-as-is
Last active July 19, 2021 08:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewp-as-is/ecbb87a71c2875af7036a12731a9aa7a to your computer and use it in GitHub Desktop.
Save andrewp-as-is/ecbb87a71c2875af7036a12731a9aa7a to your computer and use it in GitHub Desktop.
postgres select basename
CREATE OR REPLACE FUNCTION basename(path text) RETURNS text AS $$
SELECT reverse((regexp_split_to_array(reverse($1), '/'))[1])
$$
LANGUAGE SQL IMMUTABLE;
SELECT basename('/Users/username/git/owner/repo');
CREATE TABLE t(
path text PRIMARY KEY,
basename text
);
CREATE OR REPLACE FUNCTION basename(path text) RETURNS text AS $$
SELECT reverse((regexp_split_to_array(reverse($1), '/'))[1])
$$
LANGUAGE SQL IMMUTABLE;
CREATE OR REPLACE FUNCTION update()
RETURNS trigger AS
$BODY$
BEGIN
NEW.basename:=basename(NEW.path);
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
DROP TRIGGER IF EXISTS update ON t CASCADE;
CREATE TRIGGER update
BEFORE INSERT OR UPDATE ON t
FOR EACH ROW
EXECUTE PROCEDURE update();
INSERT INTO t(path) VALUES ('path/to/file.txt'), ('path/to/image.png');
SELECT * FROM t;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment