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 8526 게시물 읽기
No. 8526
Alter Table drop coumn 시의 해당테이블을 타입으로 리턴하는 함수 문제
작성자
김석래
작성일
2009-10-15 15:23ⓒ
2009-10-15 15:25ⓜ
조회수
7,612

일단.. ^-^;;

create table test_table
(
 key1 integer,
 key2 integer,
 key3 integer
);


CREATE OR REPLACE FUNCTION test_function()
  RETURNS SETOF test_table AS
$BODY$
DECLARE
 _Ret RECORD;
BEGIN
 FOR _Ret IN
  Select * From test_table
 LOOP
  RETURN NEXT _Ret;
 END LOOP;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;


insert into test_table values( 1, 1, 1 );
insert into test_table values( 2, 2, 2 );
insert into test_table values( 3, 3, 3 );
insert into test_table values( 4, 4, 4 );


alter table test_table drop column key3;


select * from test_function();
-------------------------------------
ERROR:  wrong record type supplied in RETURN NEXT
CONTEXT:  PL/pgSQL function "test_function" line 7 at RETURN NEXT




현재 쓰는 버전은 8.3 이지만.. 버전에 관계없이 발생하는거 같습니다.
Add Column 일때는 이런 문제가 없는데요 drop column 일때만 생기구요
혹시 해결 방법을 알고 계신분 >.<;;;

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

이부분을

_Ret test_table;

이렇게 변경하셔서 해보시기 바랍니다,
김병석(byung82)님이 2009-10-15 16:10에 작성한 댓글입니다.

해결책은 병석 님 께서 이야기 하신대로 하면 되고요...


근데...



어쨌건.. 버그는 확실한거 같네요...


tyro님이 2009-10-16 00:26에 작성한 댓글입니다. Edit

답변 감사드립니다.


그런데요 RECORD 를 test_table 로 바꾸면 delete 에는 문제가 없는데


add column 했을때 또 같은 문제가 나타나네요 >.<;


pg_attribute 쪽에도 정상적으로 컬럼들이 있는거 같은데;;


dump/restore 밖에 방법이 없을꺼 같네요 ㅜ.ㅜ;

김석래님이 2009-10-16 09:14에 작성한 댓글입니다. Edit

plpgsql 버그 같습니다.


꽤 재미난 버그였네요.


그런데, 이미 수정된 듯합니다. 개발버전에서는 패치가 적용된 듯합니다.


방금 테스트 해봤는데, 여전히 못고치고 있네요.

한번 도전해 볼만 한 듯


세션이 종료되고 다시 접속하니까 제대로 나오네요.

아마 add column 버그 쪽은 커넥션 캐쉬랑 문제가 있는게 아닐까싶습니다.

김상기(ioseph)님이 2009-10-16 17:57에 작성한 댓글입니다.
이 댓글은 2009-10-16 18:26에 마지막으로 수정되었습니다.

댓글 쓰고 나서 생각났습니다.

이 버그 알려진 버그였습니다.

계속 못고치고 있는 버그였죠.


그래서, table return 함수가 참조하는 테이블들은 '절대로 dml 작업을 하지 말것' 하면서

주의를 까맣게 잊고 있었네요.


덕분에 기억나게 되었네요. 고맙습니다.

김상기(ioseph)님이 2009-10-16 18:06에 작성한 댓글입니다.

아~ 그랬었군요 >.<


이전에도 이런문제가 있었는데..;; 


그때는 restore 시점하고 같이 물려 있어서 그냥 넘어갔던거 같네요 ㅜ.ㅜ


많이 배워 갑니다~ 관심 가져주셔서 감사합니다 ^-^




김석래님이 2009-10-16 22:48에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
8529pgsql의 Data 저장의 관하여 query 속도 문의 [8]
성진
2009-10-23
8586
8528한글 문제... [2]
박병호
2009-10-23
7965
8527null sort 문제 [1]
질문자
2009-10-20
6938
8526Alter Table drop coumn 시의 해당테이블을 타입으로 리턴하는 함수 문제 [6]
김석래
2009-10-15
7612
8525schema 를 복제하는 방법이 없을까요? [2]
tyro
2009-10-13
7450
8524windows에서 sql shell 명령어 사용 질문드립니다. [1]
질문자
2009-10-12
8064
8523윈도우즈에서 postgresql 설치 메뉴얼은? [1]
박병호
2009-10-09
7687
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다