2012-09-20 2 views
2

Jeffothers의 자동 증가 ID를 GUID에 리팩토링하면 GUID가 자동 증가 ID보다 바람직하다는 확신을 얻었습니다. 나는 인덱스를 UUID로 "리팩토링"하고 싶다면 Postgres DB를 자동 증분 ID로 인덱싱합니다. 테이블을 가로 지르는 함수를 작성하는 것 외에 테이블을 가로 지르는 인덱스 일치를 확인하는 것과 관련하여 일반적인 (또는 특정) 접근법이 있습니까?** SQL DB

업데이트

  • 참고 : 데이터베이스가 현재 생산되지 않으므로 성능과 트랜잭션 무결성이 아닌 문제입니다.
+0

이렇게하려면 사용자 지정 스크립트를 작성해야합니다. 얼마나 많은 테이블을 가지고 있느냐에 따라이 스크립트를 작성하고 테스트하는 것은 에디터에서 수동으로 변경하는 것보다 시간이 오래 걸릴 수 있습니다. –

+1

모든 행을 수동으로 변경 하시겠습니까?! 나는 그것을하기 위해 많은 원숭이가 필요할 것이다. –

+0

내 의견에 명확하지 않은 것에 대해 사과드립니다. 나는 변화의 범위를 추정 할 수있는 하나의 가능성으로 테이블 수를 참조했다. 나는 행, 레코드, 튜플 또는 데이터를 말하지 않았다. 또한 데이터베이스 테이블을 열고 스프레드 시트 인 것처럼 데이터를 변경하는 편집자의 사용은 권장하지 않습니다. 필자는 IDE 에서처럼 phpPgAdmin, Toad, SSMS 등과 같은 편집기를 언급합니다. –

답변

2

나는 자동으로이 작업을 수행 할 수있는 항목을 찾을 수 없으므로 사용자가 원하는대로 작업 할 수 있습니다. 세상은 여전히 ​​데이터베이스 개발자가 필요합니다.

가장 좋은 방법은 틀림없이 전체 변경을 스크립팅하는 것입니다. 이 스크립트를 만드는 가장 좋은 방법은 아마도 다른 스크립트 또는 코드 (코드를 작성하는 코드)를 사용하는 것일 수 있습니다.이 스크립트는이 특정 시나리오에서 사용할 수없는 것 같습니다. 물론 이들 각각은 구성되고 테스트되어야하는 또 다른 소프트웨어 계층을 추가합니다. 이 프로세스를 얼마 동안 반복하거나 일정 수준의 감사 추적 (예 : 스크립트 변경)이 필요하다고 생각하면이 스크립트를 작성하는 스크립트를 작성하고 스크립트를 작성하십시오.

실제로이 작업을 단 한 번의 계약으로 수행하고 DB 액세스를 막을 수 있다면 변경 사항을 수작업으로 수정하는 데 드는 시간과 노력을 절약 할 수 있습니다. 데이터 베이스. 이것에 의해, 당신이 선호하는 방법 (다이어그램, SQL DDL 등)을 통해 UUID 컬럼을 추가하고, 데이터 (아마 임시 SQL DML로)를 채우고, 키와 제약 조건을 설정 한 다음, 결국 오래된 외부 키를 제거하고 열 (다시 원하는 방법을 사용).

환경이 여러 개인 경우 (dev, test, prod) 잠재적으로 dev에서이 작업을 수행 한 다음 DB 비교 도구를 사용하여 변경 내용을 스크립팅 할 수 있지만 스크립트로 작성된 새 FK 값이 필요합니다. 이 SQL 서버에서 (내 가장 쉬운 DB)를 비록

예 여기

은 당신에게 아이디어를주고,하는 working script example on SQL Fiddle당신이 불행하게도,하지 방법 스크립트 (할 것이다 무엇). 하나의 특정 작업 중에 누군가가 무언가를 수정할 수 있기 때문에 여전히 트랜잭션 적으로 일관성이 없습니다.

나는 이것이 어떤 의미에서 완전한 대답이 아니라는 것을 알고 있으므로 자유롭게 나를 투표 (더 나은 대답을 제공)하십시오.

행운을 빈다는 것은 실제로 재미있는 문제입니다.