2022-12-19

This is Maëlle's DBGI daily open-notebook.

Today is 2022.12.19

TODO

  • link naturalist id pyinat-samples
  • autoincrementation id
  • tuto for dummy

CODE

Autoincrementation id:

https://stackoverflow.com/questions/27121196/how-to-auto-increment-alpha-numeric-value-in-postgresql

CREATE SEQUENCE xxx;
CREATE TABLE samples_2(EMI_external_ID text PRIMARY KEY 
                                    CHECK (EMI_external_ID ~ '^\w+_[0-9]+$' ) 
                                    DEFAULT 'DBGI_'  || lpad(nextval('xxx')::text,6,'0'), 
                      Reserved boolean,
                      BG VARCHAR(25),
                      inaturalist_id numeric,
                      Comment text,
                      sample location VARCHAR(25),
                      QR uuid,
                      FOREIGN KEY(QR) REFERENCES directus_files(id) ON DELETE SET NULL);

==> Works if only 'DBGI_' ids

Should maybe create 2 columns to concat => one with autoincremented integer, second with project id (eg.DBGI)

UPDATE samples
SET inaturalist_ID = pyinat.ID
FROM pyinat WHERE samples."DBGI_SPL_ID" = pyinat.EMI_external_ID;

Then create a trigger to do that automatically:

CREATE OR REPLACE FUNCTION update_emi_id()
RETURNS TRIGGER AS $$
BEGIN
  UPDATE samples
  SET inaturalist_ID = pyinat.ID
  FROM pyinat 
    WHERE samples."DBGI_SPL_ID" = pyinat.EMI_external_ID;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER update_emi_id_trigger
AFTER UPDATE OF EMI_external_ID ON pyinat
FOR EACH ROW
EXECUTE PROCEDURE update_emi_id();

NOTES

TODO NEXT

  • tuto for dummy => until 23.01