2013-09-04 2 views
1

한 번에 여러 테이블 (100 개 이상의 테이블)을 만들고 싶습니다. 내가 원하는만큼 테이블을 생성하기위한 for 루프와 같은 루프를 사용하여 스크립트를 작성하려고합니다. 나는 PostgreSQL을 처음 접했습니다. 누군가가 나에게 조언을 해줄 수 있다면 감사 할 것입니다.PostgreSQL에서 다중 테이블 만들기

+1

데이터베이스에서 100 개 이상의 테이블을 만드는 이유가 무엇인지 다시 생각해보십시오. 각 사용자 또는 각 고객에 대해 동일한 테이블을 만들려고합니까? 'customer_name'또는 customer_id 필드라는 열을 추가하는 것이 훨씬 더 좋습니다. – Twelfth

+0

@ Twelfth, 당신 말이 맞아요. 각 고객에 대해 테이블을 만들려고합니다. 그래, 테이블은 동일합니다. – user2711722

+0

나는 일반적으로 간단한 텍스트 연결 수식이있는 스프레드 시트를 사용하여 이러한 일회성 작업을 수행합니다. 예를 들면 다음과 같습니다.'= "create table"& A1 & "(int, b int);"'A 열에 테이블 이름이 있고 이 수식을 복사/붙여 넣기하십시오. –

답변

2
#!/bin/sh 

(
for i in 0 1 2 3 4 5 6 7 8 9; do 
for j in 0 1 2 3 4 5 6 7 8 9; do 
     echo "SET search_path=tmp;" 
     echo "CREATE TABLE barf${i}${j}" 
     echo " (id SERIAL NOT NULL PRIMARY KEY);" 
done 
done) | psql -U lutsername databasename 
+2

Er ....'$ for (seq 0 99); '할거야?' –

+0

IIRC는 bash 확장이 될 것입니다. 업데이트 : 아니, 그렇지 않습니다. (그러나 어이! 나는 명백하게하는 것을 좋아한다) 그러나 최소한 ARG_MAX가 <100 ;-) 인 시스템에서 작동 할 것이다. – wildplasser

+0

그렇다면 널리 지원된다. zsh, dash에서 작동합니다. –

1

내 대답은 여기에있다 '그렇게 해달라고!' 그리고 당신의 건축을 바꿔라. customer라는 테이블을 만들고 다른 정보와 함께 customer_id를 만듭니다. 여기에 원하는 열이있는 두 번째 테이블을 만들고 'customer_id'열을 만들어 고객 테이블을 참조하십시오. 이 형식을 사용하면 100 개 이상의 테이블에 저장하려는 항목을 두 개의 테이블에 저장할 수 있습니다. 이 단계에서 데이터베이스 설계를 표준화하기를 원한다면 그렇지 않을 수도 있습니다. 그렇게하지 않으면 먼 미래에 악몽에 빠지게 될 것입니다. 데이터베이스가 스프레드 시트가 아닙니다 ...

+0

나는 귀하의 제안에 감사하지만 그것은 나의 고객의 요구입니다. 조직은 고객별로 테이블을 분류하려고합니다. – user2711722

+0

@ user2711722 : 그것은 내가 들어 본 중에 가장 바보 같은 요구 사항입니다. 내가 너라면 나도 그런 말도 안되는 것을 버릴거야. 여전히 하나의 테이블을 만들고 Twelth의 접근 방식을 사용하여 고객 전용 테이블을 "가짜"로 만드는 뷰를 만들 수 있습니다. –

+0

나는 그들이 여기에 생성되는 악몽을 여전히 이해하고 있는지 확인합니다 ... 향후 관리 비용과이 세트의 부피 (나중에 귀하의 질문에 -2가있는 이유입니다). 즉, 고객은 항상 옳았고 절벽에서 뛰어 내리는 느낌이 든다면 우리의 의무를 버리는 것이 중요합니다. 누군가는 결국 이걸 정리할 계약을 맺을거야. 이것을 동적 SQL (보안 허점)으로 반복 할 수 있지만 클라이언트가 신경 쓰지 않을 것이라는 느낌을받습니다. 내 선호도는 Tomas Greif가 말했듯이 스프레드 시트를 사용하여 이러한 테이블을 대량으로 만듭니다. – Twelfth

관련 문제