2016-08-23 2 views
3

PostgreSQL 데이터베이스의 모든 스키마 내에서 '위치'라는 이름의 모든 열 이름을 'location_name'으로 바꿀 수있는 방법이 있습니까?PostgreSQL에서 특정 열 이름을 가진 모든 테이블의 모든 열의 이름을 바꿉니 까?

나는 SQL에 상당히 익숙하며 ALTER TABLE 명령이 있다는 것을 알고 있지만 어떻게 든 모든 테이블을 순환 할 수 있는지 알 수 없습니까?

+1

데이터베이스를 처음부터 다시 만들려면 항상 스크립트가 있어야합니다. 해당 스크립트를 편집하십시오. – jarlh

답변

4

당신이 시스템 카탈로그에 하나 스윕에서 변경할 수 있습니다 :

UPDATE pg_attribute 
SET attname = 'location_name' 
WHERE attname = 'location'; 
1

당신은

SELECT * FROM information_schema.columns WHERE column_name = 'location'; 

하여 데이터베이스의 모든 location 열을 가져 그리고 아마 모든 쿼리의 이름을 바꾸 실행하기 위해 어떤 프로그래밍 언어를 사용할 수 있습니다. 거의 모든 데이터베이스 관리 시스템에는 information_schema 테이블이 있습니다 (비록 다르게/구조화라고도 함). 수퍼 유저 권한이있는 경우

select concat('ALTER TABLE ', table_name, ' RENAME COLUMN ', column_name, ' TO location_name;') from information_schema.COLUMNS 
where column_name = 'location'; 
1

난 당신이 뭔가를 실행 얻을 것이다 가장 가까운 생각 익명의 PL/pgSQL 블록을 사용하여 자동화 된 방식으로이 작업을 수행하려면 동적 SQL이 필요합니다.

do 
$$ 
declare 
    l_rec record; 
begin 
    for l_rec in (select table_schema, table_name, column_name 
       from information_schema.columns 
       where table_schema = 'public' 
        and column_name = 'location') loop 
    execute format ('alter table %I.%I rename column %I to %I_name', l_rec.table_schema, l_rec.table_name, l_rec.column_name, l_rec.column_name); 
    end loop; 
end; 
$$ 

스키마가 여러 개 있거나 테이블이 public 스키마에 없으면 where table_schema = 'public' 조건을 적절한 제한으로 대체하십시오.

2

당신에게

+0

자세한 답변을 주셔서 감사합니다. Patrick의 회신에 성공했지만이 방법도 효과가있을 것입니다. – Chris

+0

@Chris : 시스템 카탈로그를 엉망으로 처리하는 것은 좋은 해결책이 아닙니다. –

관련 문제