postgreSQL-省略重复表名



假设我想从SQL(postgres(中的现有表创建一个新表。我希望新表与旧表具有相同的名称,但希望它在不同的模式中。

有没有一种方法可以做到这一点,而不必重复两个表的名称(谁共享一个名称?(

假设原始表的名称是public.student

CREATE TABLE student(
student_id INT PRIMARY KEY,
last_name VARCHAR(30),
major VARCHAR(30))

现在我想要确切的表格,但我希望它在测试中我知道我会";克隆";通过

CREATE TABLE test.student AS 
SELECT * 
FROM public.student;

但我想写这篇文章,而不必重复写";学生";。有没有办法为此编写函数?

我是SQL的新手,所以我很感谢大家的帮助!我研究了函数,但没能让它发挥作用。

您可以使用动态SQL:创建过程(或函数(

CREATE OR REPLACE PROCEDURE foo(_schema text, _table text)
LANGUAGE plpgsql AS
$func$
BEGIN
EXECUTE format('CREATE TABLE %1$I.%2$I AS TABLE public.%2$I'
, _schema, _table);
END
$func$;

呼叫:

CALL foo('test', 'student');

请注意,此处的标识符区分大小写!

警惕可能的SQL注入。带有格式说明符%I(用于标识符(的format()是安全的。(嵌套的$1$2是对格式输入的顺序引用(

参见:

  • 在plpgsql函数中将表名和列名定义为参数
  • 表名作为PostgreSQL函数参数

相关内容

  • 没有找到相关文章

最新更新