database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 7483 게시물 읽기
No. 7483
레코드 ID로 복수테이블 생성
작성자
chunrima(chunrima)
작성일
2008-08-06 20:32
조회수
5,888

레코드 ID로 복수데이블 생성한 경험이 있으신분께 도움 부탁드립니다.

1. 첫번째 테이블을 아래와 같이 만들어 레코드를 입력했습니다.


CREATE TABLE mytest (

    staid varchar(20),

    kdesc  varchar(50)          -- description of gage station

    )

    WITHOUT OIDS;


INSERT INTO mytest VALUES ('96784002', 'mylocation #1');

INSERT INTO mytest VALUES ('02385067', 'mylocation #2');

INSERT INTO mytest VALUES ('01734056', 'mylocation #3');

INSERT INTO mytest VALUES ('04784097', 'mylocation #4');

INSERT INTO mytest VALUES ('16784201', 'mylocation #5');


2. 테이블의 형태가 이렇게 나오구요.

SELECT * FROM mytest;

++++++++++++++++++++++++++

"96784002";"mylocation #1"

"02385067";"mylocation #2"

"01734056";"mylocation #3"

"04784097";"mylocation #4"

"16784201";"mylocation #5"

++++++++++++++++++++++++++


3. 위에 발생한 테이블 결과물을 이용하여 특히 staid 컬럼의 레코드를 이용하여 FOR 루프를 이용하여 자동테이블을 생성하려고 합니다.

하지만 테이블의 이름이 TEXT형태로 되어야하기 때문에 앞에 's'를 첨가하여 테이블 이름이 's'+'staid' 즉, 예를들면 s96784002 테이블을 만들고 싶습니다.

+++첫번째 테이블의 생성예+++

CREATE TABLE s06784000 (

    staid            varchar(50),

    val            real,          -- streamflow

    date            date

)

WITHOUT OIDS;


4. 총 레코드가 수천개가 되다보니 하나하나씩 만들수도 없고 FOR 루프로 이용하면 쉽게 가능할것 같은데, 혹시 경험있으신분은 도움부탁드립니다.


답변 미리 감사합니다.

이 글에 대한 댓글이 총 6건 있습니다.

흠 테이블을 그렇게 생성하실 이유라도 있으신가여 ?



CREATE TABLE mytest (

    staid varchar(20),

    kdesc  varchar(50)          -- description of gage station

    )

    WITHOUT OIDS;

CREATE TABLE data(

    staid            varchar(50),

    val            real,          -- streamflow

    date            date

)

2개를 만들어서 forgen key로 연결하시면 안되는건가여 ??

조금더 부연설명을 부탁드리겠습니다.


김병석(byung82)님이 2008-08-06 23:36에 작성한 댓글입니다.

왜냐하면, staid 는 개별적인 관측소의 ID인데, 이 관측소가 수천개인데다가

한 관측소 즉, 예를들면 06784000 라는 관측소의 데이터가 엄청나다는 거죠.

더 자세히 설명드리면, 이 관측소의 데이터가 강우자료를 포함한다고 했을때,

1940 년부터 현재 2008년 8월 5일까지 매 시간마다 자료를 저장한다면..

24시간 * 265일 *  69년 =  604440  개의 레코드가 생성이 되고


이런 관측소가 2,000 개가 있다고 가정하여 한테이블에다가 모두 저장을 했을경우는

총 레코드수가 1,208,880,000 (약 1억 2천개)개가 되므로 쿼리를 실행하여

어느 한관측소의 평균을 구한다든지, 어느지역의 200 개 관측소의 총강수량을 구한다든지

하면 수만은 레코드를 핸들하는데 컴퓨터 리소스와 시간이 소비될것 같아서

개별관측소마다 하나의 테이블을 생성하여 연결하려고 합니다.


부연설명이 되었는지 모르겠습니다.


가능할까요?

chunrima님이 2008-08-07 03:03에 작성한 댓글입니다. Edit

^^;

관측소 데이터라면 한번에 60년치 데이터를 보일 이유가 있나요 ^^;

년 단위로 select 하고 index만 잘 걸어준다면 전혀 문제가 안되어 보입니다.

그럼

김병석(byung82)님이 2008-08-07 09:40에 작성한 댓글입니다.

수천개가 되더라도 택스트 에디터로 그리 어렵지 않게 만들수 있을거 같은데요?


아니면 자동생성을 원하시는 건가요?

후님이 2008-08-07 16:19에 작성한 댓글입니다. Edit

그냥 간단히 다루실 수 있는 프로그래밍 언어로 만드시면 될 것 같은데요. ^^


아니면 vim의 macro 기능을 이용해서 좌르르.....;;;

박성철(gyumee)님이 2008-08-07 19:14에 작성한 댓글입니다.

동적 쿼리로 해버리면 되긴 하겠지만 ^-^;


CREATE OR REPLACE FUNCTION create_table_dynamic(character varying)
  RETURNS smallint AS
$BODY$
DECLARE
   
_table_name alias for $1;
    _create_cmd varchar;
BEGIN
    _create_cmd := 'create table '
                          || quote_ident( _table_name )
                          || '( staid varchar(20), kdesc  varchar(50) );' ;

    BEGIN
             execute _create_cmd;
 
    EXCEPTION
    WHEN duplicate_table THEN
              RETURN 0;
    END;

    RETURN 1;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;


"년 단위로 select 하고 index만 잘 걸어준다면 전혀 문제가 안되어 보입니다." <--

요부분에 공감합니다. ^-^

김석래님이 2008-08-08 16:38에 작성한 댓글입니다.
이 댓글은 2008-08-08 16:41에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7486- [1]
아무개
2008-08-10
5528
7485- [1]
아무개
2008-08-08
5738
7484카운트를 하려는데요 [1]
평평
2008-08-07
5722
7483레코드 ID로 복수테이블 생성 [6]
chunrima
2008-08-06
5888
7482테이블 컬럼을 변경했을시에 나는에러.
나윤성
2008-08-04
6305
7480증분 백업에 대해
레전드
2008-08-02
6724
7478인덱스 관련 질문(WHERE조건이 많을 경우)... [4]
오래된남자
2008-07-29
8325
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다