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 6324 게시물 읽기
No. 6324
read int not null default '0' => 잘못된 구문인가요?
작성자
아흑
작성일
2005-09-16 18:07
조회수
2,395

create table 테이블명 (

id serial,

..

(생략)

..

 

read int not null default '0',

 

..

..

 

);

 

 

 

read 라는것은 게시판에서 글이 읽혀진 수 입니다.

mysql에서는 저런식으로 사용했는데, psql 에서

 

저렇게 사용하니까 에러가 뜨더라구요.

 

ERROR: adding columns with defaults is not implemented.

add the column, then use alter table set default .

 

라고 찍히더라구요. 무엇이 문제인지요? 도움 부탁드리겠습니다.

 

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

에러 메시지를 보니 그 메시지는 alter table 로 컬럼을 추가할 때 나오는 메시지 입니다. create table할때 문법은 정상적인데..

 

alter table로 컬럼을 추가할때 동시에 제약조건을 줄 수 없습니다. 위의 예라면

 

1. alter table tbl add read integer;

2. update tbl set read=0

3. alter table tbl alter read set default 0

4. alter table tbl alter read set not null

 

의 순서로 해야합니다. 3, 4번을 하기전에 2번을 먼저하는 것은 추가된 컬럼에는 이미 디폴트로 NULL이 들어가있기 때문에 3,4번과 충돌되는 것을 방지하는 것입니다.

최정대(whitekid)님이 2005-09-16 19:09에 작성한 댓글입니다.

read 가 int 형이면서 default 를 문자형을 지정하니 당연히 에러가 날 수 밖에요

 

php 가 아닌 다른 언어를 아주 간단한거라도 한번이라도 해 보셨다면

쉽게 이해하시리라 믿어요

 

아무리 0 이 숫자라 할지라도 따옴표로 묶어 버리면 문자로 취급됩니다.

 

그러니 컬럼은 숫자인데 디폴트 값을 문자로 지정하니 논리적 오류인거죠

 

 

mysql 의 경우도 이전 버젼에서는 php 에서와 같이 타입을 알아서 해 줬는데 4.1 버젼 부터인가 에서부터는 조금은 제한적입니다.

 

아마도 mysql 4.1 에서 위와 같이 지정하면 오류가 뜰거 같습니다.

 

 

tyro님이 2005-09-16 22:52에 작성한 댓글입니다. Edit

안녕하세요. 두분 답변 감사 드립니다.

알려주신대로

 

1. alter table tbl add read integer;

2. update tbl set read=0

3. alter table tbl alter read set default 0

 

위와같은 구문을 실행해보았습니다. 잘 되구요. 4번째 구문을 실행하려니

 

alter table 테이블명 alter tag set not null; (엔터)

error: parser: parse error at or near "not" 이라고 뜹니다.

 

왜 잘못된건지 모르겠습니다.

그리고 psql은 alter table ~ change ~ 명령이 정말로 되지않는건가요?

현재 버젼이 7.x 입니다. 감사합니다.

질문자님이 2005-09-20 14:16에 작성한 댓글입니다. Edit

 

현재 tag 필드에 null 값이 들어가 있는건 아닌지 ㅡㅡ..
울라떵님이 2005-09-20 16:01에 작성한 댓글입니다. Edit

안녕하세요. 답변감사합니다.

 

tag 필드에 null 값은 없구요,

 

 

column | type        | nodifiers

tag        | integer    |  default 0

 

 

이렇게만 되어 있답니다.

질문자님이 2005-09-20 16:27에 작성한 댓글입니다. Edit

alter구문이 7.x에서 많이 보강됐슴니다

 

psql에서 \h alter로 해서

 

alter table tbl alter read set not null 요거에해당되는게 있는지 확인해보세요

 

7.0.x인지 7.1.x인지 정확한 버젼이 어떻게되나요?

 

ㅋ님이 2005-09-20 16:51에 작성한 댓글입니다. Edit

7.3이후에

set col not null 구문이 된거같애요

 

ㅋ님이 2005-09-20 16:57에 작성한 댓글입니다. Edit

안녕하세요.

친절하신 답변 감사드려요~~

\h alter했을때 결과입니다.

 

 

 

Command:     ALTER GROUP
Description: add users to a group or remove users from a group
Syntax:
ALTER GROUP name ADD USER username [, ... ]
ALTER GROUP name DROP USER username [, ... ]

Command:     ALTER TABLE
Description: change the definition of a table
Syntax:
ALTER TABLE [ ONLY ] table [ * ]
    ADD [ COLUMN ] column type [ column_constraint [ ... ] ]
ALTER TABLE [ ONLY ] table [ * ]
    ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
ALTER TABLE [ ONLY ] table [ * ]
    ALTER [ COLUMN ] column SET STATISTICS integer
ALTER TABLE [ ONLY ] table [ * ]
    RENAME [ COLUMN ] column TO newcolumn
ALTER TABLE table
    RENAME TO new_table
ALTER TABLE table
    ADD table_constraint_definition
ALTER TABLE [ ONLY ] table
        DROP CONSTRAINT constraint { RESTRICT | CASCADE }
ALTER TABLE table
        OWNER TO new_owner

Command:     ALTER USER
Description: change a database user account
Syntax:
ALTER USER username [ [ WITH ] option [ ... ] ]

where option can be:

          [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
        | CREATEDB | NOCREATEDB
        | CREATEUSER | NOCREATEUSER
        | VALID UNTIL 'abstime'

hydro=> select version();
                                version                               
-----------------------------------------------------------------------
 PostgreSQL 7.2.1 on i386-unknown-freebsd4.1.1, compiled by GCC 2.95.2
(1 row)

 

 

 

버젼은 7.2.1 이네요.

not null 이 안보이는걸로봐서 아니되는건가요?

 

다른 컬럼중에

code      | character varying(50)       | not null default ''


요넘은 not null default '' 가 되는데.. 이것은 varchar라서 되는것이고

안되는것은 int 라서 안되는것인지. 흠. 봐주셔서 감사합니다.

질문자님이 2005-09-20 17:19에 작성한 댓글입니다. Edit

님쓰시는 버젼에선 안되나보네요

 

임시필드를 만들어 데이타 옮겨놓고 tag필드지우고 다시 만들어 데이터 넣는 수밖에 없어보여요.

 

7.3이후 넘 좋은기능들이 많이 들어가있어요

 

가능하다면 버젼을 바꾸시는것도....

 

 

 

 

 

ㅋ님이 2005-09-21 07:43에 작성한 댓글입니다. Edit

아~~ 버젼때문이였나보군용

 

답변 정말 감사드려요~~

 

버젼은 제가 설치할수 있는 서버가 아니라서.. 아쉽게 못하네요.

 

많은거 배우고 갑니다. 모두 감사드립니다.

질문자님이 2005-09-21 11:37에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6331$pg_close($connect); 의 쓰임새 [3]
초보
2005-09-21
1679
6330깨진 한글 덤프시 구분자(TAB 문자) 깨짐 현상? [3]
장효순
2005-09-21
2541
6328pg_fetch_array 함수에 대해 문의 드립니다. [2]
질문자
2005-09-20
1710
6324read int not null default '0' => 잘못된 구문인가요? [10]
아흑
2005-09-16
2395
6320Function 인수제한 어떻게 늘리죠? [1]
조성배
2005-09-15
1629
6319where 컬럼 between '가' and '나' 에서 한글을 인식 안하나 봅니다. [1]
파랭끼
2005-09-15
2178
6318윈도우 xp(혹은 2003) 에서 5432 포트 문의 [1]
이동원
2005-09-14
2018
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다