web-dev-qa-db-fra.com

Fonction PostgreSQL pour créer une table

Je souhaite créer une fonction pour créer une table avec une structure spécifique une partie du nom de la table sous forme d'argument afin que le nom de la table soit T_. Semblable à ceci:

CREATE OR REPLACE FUNCTION create_table_type1(t_name VARCHAR(30)) RETURNS VOID AS $$
BEGIN
    EXECUTE "CREATE TABLE IF NOT EXISTS t_"|| t_name ||"
    (
    id SERIAL,
    customerid INT,
    daterecorded DATE,
            value DOUBLE PRECISION,
    PRIMARY KEY (id)
    )"
END
$$ LANGUAGE plpgsql

Appelez-le alors comme:

SELECT create_table_type1('one');

C'est possible?

9
Alan Cor

oui, c'est possible. Cependant, vous devez être un peu prudent. DDLS dans une procédure stockée fonctionnent généralement. Dans certains cas d'angle méchants, vous risquez de vous retrouver avec des erreurs "cache de recherche". La raison en est qu'une procédure est essentiellement une partie d'une déclaration et la modification de ces objets système à la volée peut dans des cas d'angles rares provoquant des erreurs (doit être). Cela ne peut pas arriver avec la table de création, cependant. Donc, vous devriez être en sécurité.

2