복붙노트

[SQL] PostgreSQL의 열 'foo는'존재하지 않는

SQL

PostgreSQL의 열 'foo는'존재하지 않는

나는 20 정수 열 및 1 텍스트 열이있는 테이블이 '갑'라는 이름이

나는 쿼리를 실행하는 경우 :

SELECT * from table_name where foo is NULL

나는 오류가 발생합니다 :

ERROR:  column "foo" does not exist

나는 그의 열이 실제로 존재하는지 자신을 확인했다. 내가 좋아하는 뭔가를 할 경우 :

SELECT * from table_name where count is NULL

열 중 하나로서 생성 된 출력 프로그램 '갑'.... 나는 foo는 텍스트 열이기 때문에 쿼리에 뭔가 특별한 할 필요가 추측하고있다 ...

도움을 주셔서 감사합니다 (POSTGRESQL 8.3)

해결법

  1. ==============================

    1.당신은 실수로 후행 공백으로 열 이름을 생성 아마도 phpPGadmin은 큰 따옴표로 열 이름을 만든 :

    당신은 실수로 후행 공백으로 열 이름을 생성 아마도 phpPGadmin은 큰 따옴표로 열 이름을 만든 :

    create table your_table (
        "foo " -- ...
    )
    

    즉 어디에서나라는 것처럼 foo를 보였다 것을 당신에게 열을 줄 것입니다하지만 당신은 큰 따옴표로 그것을 가지고 당신이 그것을 사용할 때마다 공간을 포함 할 것입니다 :

    select ... from your_table where "foo " is not null
    

    가장 좋은 방법은 PostgreSQL을 함께 소문자 인용 부호로 둘러싸이지 않은 열 이름을 사용하는 것입니다. 내가 그 설정 (또는 존재하는 경우에도)하지 어디에 할 수 있도록하지만, 슬프게도 (예 : 테이블 및 열 이름과 같은) 식별자, 나는 phpPGadmin를 사용하지 않는 인용하지 그것을 말할 것이다 phpPGadmin의 어딘가의 설정이 있어야합니다.

  2. ==============================

    2.어떤 이유로 당신이 혼합 된 경우 또는 대문자 열 이름을 만든 경우, 당신은 그것을 인용, 또는이 오류를 얻을 필요가 :

    어떤 이유로 당신이 혼합 된 경우 또는 대문자 열 이름을 만든 경우, 당신은 그것을 인용, 또는이 오류를 얻을 필요가 :

    test=> create table moo("FOO" int);
    CREATE TABLE
    test=> select * from moo;
     FOO 
    -----
    (0 rows)
    test=> select "foo" from moo;
    ERROR:  column "foo" does not exist
    LINE 1: select "foo" from moo;
                   ^
    test=> _
    

    오류 메시지가 따옴표의 경우를 제공하는 방법을합니다.

  3. ==============================

    3.PostreSQL는 분명히 SQL 쿼리에서 소문자로 열 이름을 변환 - 나는 혼합 된 경우 열 이름은 그 오류를 줄 것이다 문제를 본 적이있다. 당신은 인용 부호 열 이름을 넣어 문제를 해결할 수 있습니다 :

    PostreSQL는 분명히 SQL 쿼리에서 소문자로 열 이름을 변환 - 나는 혼합 된 경우 열 이름은 그 오류를 줄 것이다 문제를 본 적이있다. 당신은 인용 부호 열 이름을 넣어 문제를 해결할 수 있습니다 :

    SELECT * FROM table_name where "Foo" IS NULL
    
  4. ==============================

    4.다른 사람이 의견 제시,이 아마도 낮은 경우, 또는 열 이름의 일부 공백 대 대문자의 문제이다. (. 나는 몇 가지 코드 샘플을 포맷 할 수 있도록 내가 대답을 사용하고 있습니다) 열 이름이 정말 무엇인지 확인하려면이 쿼리를 실행 해보십시오 :

    다른 사람이 의견 제시,이 아마도 낮은 경우, 또는 열 이름의 일부 공백 대 대문자의 문제이다. (. 나는 몇 가지 코드 샘플을 포맷 할 수 있도록 내가 대답을 사용하고 있습니다) 열 이름이 정말 무엇인지 확인하려면이 쿼리를 실행 해보십시오 :

    SELECT '"' || attname || '"', char_length(attname)
      FROM pg_attribute
      WHERE attrelid = 'table_name'::regclass AND attnum > 0
      ORDER BY attnum;
    

    당신은, 그것은 문에 대해보고 무엇을 볼 수 있다면 당신은 아마 또한 PostgreSQL 서버 로그를 확인해야합니다.

    당신이 식별자를 인용하는 경우, 따옴표로 모든 대문자 문자, 줄 끝에 공백 및 특수 문자를 포함하여 식별자의 일부입니다. 유일한 예외는 두 개의 인접한 인용 문자가 하나 개의 인용 문자에 대한 이스케이프 시퀀스로 간주된다는 것이다. 식별자가 따옴표로하지 않을 때, 모든 문자는 소문자로 접어된다. 여기에 정상적인 동작의 예입니다 :

    test=# create table t (alpha text, Bravo text, "Charlie" text, "delta " text);
    CREATE TABLE
    test=# select * from t where Alpha is null;
     alpha | bravo | Charlie | delta  
    -------+-------+---------+--------
    (0 rows)
    
    test=# select * from t where bravo is null;
     alpha | bravo | Charlie | delta  
    -------+-------+---------+--------
    (0 rows)
    
    test=# select * from t where Charlie is null;
    ERROR:  column "charlie" does not exist
    LINE 1: select * from t where Charlie is null;
                                  ^
    test=# select * from t where delta is null;
    ERROR:  column "delta" does not exist
    LINE 1: select * from t where delta is null;
                                  ^
    

    상단에 보여 주었다 쿼리 나는이 산출 :

     ?column?  | char_length 
    -----------+-------------
     "alpha"   |           5
     "bravo"   |           5
     "Charlie" |           7
     "delta "  |           6
    (4 rows)
    
  5. ==============================

    5.그것은 전체 문제입니다 스스로 따옴표 수 있습니다. 나는 비슷한 문제가 있었다 그리고 그것은 CREATE TABLE 문에서 열 이름에 따옴표 때문. 참고 단지 문제를 일으키는 인용, 어떤 공백 문제가 없었다.

    그것은 전체 문제입니다 스스로 따옴표 수 있습니다. 나는 비슷한 문제가 있었다 그리고 그것은 CREATE TABLE 문에서 열 이름에 따옴표 때문. 참고 단지 문제를 일으키는 인용, 어떤 공백 문제가 없었다.

    그 속에서 열이 ANID라고했지만 정말 "ANID"라고했다. 가 (이 포스트 그레스의 신인) 검출하기 힘들었다 있도록 따옴표는 일반적인 쿼리에 나타나지 않습니다. 이 포스트 그레스에 9.4.1

    좀 더 세부 사항 :

    포스트 그레스를 수행하면 = # 시험 SELECT * FROM; 준 :

      anID | value 
     ------+-------
         1 | hello
         2 | baz
         3 | foo (3 rows)
    

    하지만 테스트에서 단지 첫 번째 열에 SELECT ANID를 선택하려고; 오류 결과 :

    ERROR:  column "anid" does not exist 
    LINE 1: SELECT anID FROM test;
                    ^
    

    그냥 도움이 열 이름에하지 않았다 찾고 : 포스트 그레스 = # \ D 시험;

              Table "public.test"
     Column |       Type        | Modifiers 
    --------+-------------------+-----------
     anID   | integer           | not null
     value  | character varying | 
    Indexes:
        "PK on ID" PRIMARY KEY, btree ("anID")
    

    하지만 pgAdmin에 당신은 열 이름과 함께 채워 SQL 창에서보기를 클릭하면 :

    ALTER TABLE test ADD COLUMN "anID" integer;
    ALTER TABLE test ALTER COLUMN "anID" SET NOT NULL;
    

    보라와 보라 열 이름 주위 quoutes이있다. 그럼 결국 포스트 그레스 = # 테스트로부터 "ANID"을 선택; 잘 작동합니다 :

     anID 
    ------
        1
        2
        3
    (3 rows)
    

    같은 도덕적, 따옴표를 사용하지 마십시오.

  6. ==============================

    6.나는 값 내부에 아포스트로피 ( ')로 인용 부호 ( ")로 변경하여 고정 예를 들면 다음과 같습니다.

    나는 값 내부에 아포스트로피 ( ')로 인용 부호 ( ")로 변경하여 고정 예를 들면 다음과 같습니다.

    트럭에 ( "ID", "날짜") VALUES (862 '2002년 10월 9일 9시 15분 59초 ")를 삽입;

    이되다 :

    트럭에 ( "ID", "날짜") VALUES (862, '10 -09-2002 9시 15분 59초 ')를 삽입;

    날짜 열을 가정하면이 VarChar입니다.

  7. ==============================

    7.문제가 있기 때문에 열 이름 발생하는 것은 낙타 경우에 내부적으로는 ""그것을 랩 (큰 따옴표) 테이블 사용 작은 따옴표 ( '')에 삽입 된 값의 시간에,이 문제를 해결하기

    문제가 있기 때문에 열 이름 발생하는 것은 낙타 경우에 내부적으로는 ""그것을 랩 (큰 따옴표) 테이블 사용 작은 따옴표 ( '')에 삽입 된 값의 시간에,이 문제를 해결하기

    예를 들면 ( '' '' '') 값 schema_name.table_name 삽입;

  8. ==============================

    8.우리가 phppgadmin 클라이언트를 사용하여 테이블을 만들 때 우리는이 문제에 달렸다. phppgadmin으로 우리는 열 이름에 따옴표를 지정하지 않은 여전히 ​​우리는 같은 문제 다 퉜다.

    우리가 phppgadmin 클라이언트를 사용하여 테이블을 만들 때 우리는이 문제에 달렸다. phppgadmin으로 우리는 열 이름에 따옴표를 지정하지 않은 여전히 ​​우리는 같은 문제 다 퉜다.

    그것은 우리가 낙타 케이스로 열을 만들 수는 phpPGAdmin는 암시 적으로 열 이름 주위에 따옴표를 추가합니다. 당신이 모두 소문자로 열을 만드는 경우에 당신은이 문제로 실행되지 않습니다.

    당신은 phppgadmin의 열을 변경하고이 문제가 사라집니다 모두 소문자로 열 이름을 변경할 수 있습니다.

  9. ==============================

    9.나는 열 이름을 qutating하여 유사한 문제 해결

    나는 열 이름을 qutating하여 유사한 문제 해결

    SELECT * from table_name where "foo" is NULL;
    

    제 경우에는 그냥했다

    SELECT id, "foo" from table_name;
    

    같은 오류가 발생했습니다 i'v 따옴표없이.

  10. from https://stackoverflow.com/questions/10200769/postgresql-column-foo-does-not-exist by cc-by-sa and MIT license