-- 테이블, 컬럼(특정) Default 체크
DECLARE @tablename varchar(100)
DECLARE @columnname varchar(100)

set @tablename  = 테이블
set @columnname = 컬럼

select d.*  
  from sys.default_constraints d
 inner join sys.tables t on t.object_id = d.parent_object_id  
 inner join sys.columns c on c.object_id = t.object_id and c.column_id = d.parent_column_id 
 where t.name = @tablename
   and c.name = @columnname
;

-- 테이블, 컬럼(특정) Default 삭제
DECLARE @tablename varchar(100)
DECLARE @columnname varchar(100)
DECLARE @conname varchar(100)

set @tablename  = 테이블
set @columnname = 컬럼
SET @conname = (select d.name  
      from sys.default_constraints d
 inner join sys.tables t on t.object_id = d.parent_object_id  
 inner join sys.columns c on c.object_id = t.object_id and c.column_id = d.parent_column_id 
 where t.name = @tablename
   and c.name = @columnname
)
  
exec ('ALTER TABLE [' + @tablename + '] DROP CONSTRAINT [' + @conname + ']' )

-- 테이블, 컬럼(특정) Default 변경
DECLARE @tablename  varchar(100)
DECLARE @columnname varchar(100)
DECLARE @defaultold varchar(100)
DECLARE @conname    varchar(100)

set @tablename  = 테이블
set @columnname = 컬럼
set @defaultold = 변경 대상 Default 값
if EXISTS (select 'X' from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @tablename and COLUMN_NAME = @columnname and COLUMN_DEFAULT like '(' + @defaultold + '%)') begin
SET @conname = (
select d.name  
      from sys.default_constraints d
 inner join sys.tables t on t.object_id = d.parent_object_id  
 inner join sys.columns c on c.object_id = t.object_id and c.column_id = d.parent_column_id 
 where t.name = @tablename
   and c.name = @columnname
)   

exec ('ALTER TABLE [' + @tablename + '] DROP CONSTRAINT [' + @conname + ']')
end

if isnull((select COLUMN_DEFAULT from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @tablename and COLUMN_NAME = @columnname), '') = '' begin
exec ('ALTER TABLE [' + @tablename + '] ADD  DEFAULT CONVERT([char](8),getdate(),(112))+replace(CONVERT([char](8),getdate(),(108)),'':'','''') FOR ' + @columnname)
end

 

- 빨간색은 알아서 잘.. 변경해서.. 

DO $$ DECLARE
    r RECORD;
BEGIN
    FOR r IN (SELECT pid FROM pg_stat_activity
   where datname = 'DB명'
     and client_addr = '127.0.0.1'    
    ) LOOP
        EXECUTE ' SELECT pg_terminate_backend( ' || r.pid || ' )';
    END LOOP;
END $$;

 

* select 문 안의 where 조건에 해당하는 쿼리를 강제종료합니다.

 

-- 특정 테이블의 owner 와 소속 schema 는 아래 명령으로 쉽게 변경할수 있습니다.

ALTER TABLE 현소유자 OWNER TO 새소유자;

ALTER TABLE 테이블명 SET SCHEMA 새로운_스키마명

 

 

-- 참고로 특정 유저 소유의 모든 오브젝트들을 다른 유저 소속으로 바꾸고 싶다면 아래명으로 간단히 처리할수 있습니다.

REASSIGN OWNED BY 현OWNER TO 새OWNER;

 

 

원본링크 : https://www.postgresdba.com/bbs/board.php?bo_table=B12&wr_id=59&page=2

+ Recent posts