是否有一種簡單的方法來創建 CREATE FUNCTION IF NOT EXISTS?我有多個模式,我正在準備一個腳本,它將在目標模式中創建丟失的物件。計劃是運行一個腳本來檢查物件是否存在,如果不存在則不執行任何操作,它將創建它。'CREATE SOMETHING IF NOT EXISTS' 可以完美地處理表格序列和其他表格,但是找不到函式的解決方案。我來自 Tsql 世界,它有這個檢查。但是,看起來在 Postgres 9.6 中它不起作用 有沒有辦法繞過這個限制?
uj5u.com熱心網友回復:
您可以使用匿名塊包裝函式定義并處理重名例外:
create function f(int) returns int language sql as 'select $1';?
do $$ begin create function f (int) returns int language sql as 'select $1'; end; $$錯誤:函式“f”已經存在,具有相同的引數型別 背景關系:SQL陳述句“創建函式f(int) 回傳整數 語言sql 作為'選擇$ 1'” PL/pgSQL 函式 inline_code_block 第 3 行在 SQL 陳述句
do $$ begin create function f (int) returns int language sql as 'select $1'; exception when duplicate_function then null; end; $$?
db<>在這里擺弄
uj5u.com熱心網友回復:
您可以使用create or replace- 但如果函式的簽名發生變化,這將不起作用。
另一種選擇是使用drop function if exists后跟一個create function. 只需確保在此之后再次設定所需的權限。
uj5u.com熱心網友回復:
這是我必須做的
IF EXISTS (SELECT FROM information_schema.routines
WHERE routine_schema = 'schema_name'
AND rouitine_name = 'vw_cmp')
THEN
raise notice 'Routine vw_cmp EXISTS';
ELSE
-- create proc SQL
END IF;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/313940.html
