Postgresql 函数来创建表

Ala*_*Cor 11 postgresql plpgsql functions postgresql-9.2

我想创建一个函数,以便创建一个具有特定结构的表,将表名的一部分作为参数传递,因此表名是 t_ 。与此类似:

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
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

SELECT create_table_type1('one');
Run Code Online (Sandbox Code Playgroud)

是否可以?

Erw*_*ter 23

答案是肯定的。:)

CREATE OR REPLACE FUNCTION create_table_type1(t_name varchar(30))
  RETURNS VOID
  LANGUAGE plpgsql AS
$func$
BEGIN
   EXECUTE format('
      CREATE TABLE IF NOT EXISTS %I (
       id serial PRIMARY KEY,
       customerid int,
       daterecorded date,
       value double precision
      )', 't_' || t_name);
END
$func$;
Run Code Online (Sandbox Code Playgroud)

我正在使用format()with%I来清理表名并避免 SQL 注入。需要 PostgreSQL 9.1 或更高版本。

确保对数据使用单引号( '')。双引号 ( "") 用于 SQL 中的标识符。