假設我想從 SQL (postgres) 中的現有表創建一個新表。我希望新表與舊表具有相同的名稱,但我希望它處于不同的模式中。
有沒有辦法做到這一點而不必重復兩個表的名稱(誰共享一個名稱?)
假設原始表的名稱是 public.student
CREATE TABLE student(
student_id INT PRIMARY KEY,
last_name VARCHAR(30),
major VARCHAR(30))
現在我想要確切的表,但我希望它在 test.student 中我知道我會通過“克隆”該表
CREATE TABLE test.student AS
SELECT *
FROM public.student;
但我想寫這個而不必重復寫“學生”。有沒有辦法為此撰寫函式?
我對 SQL 很陌生,所以我很感謝您的幫助!我研究了函式,但無法使其作業。
uj5u.com熱心網友回復:
您可以使用動態 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 注入。format()帶有格式說明符%I(用于identifier)是安全的。(嵌套$1,$2是對格式輸入的序數參考)
看:
- 將表名和列名定義為 plpgsql 函式中的引數?
- 表名作為 PostgreSQL 函式引數
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383307.html
標籤:sql PostgreSQL的 功能 干燥
上一篇:選擇distinct很慢
