복붙노트

[SQL] 단순히 PostgreSQL의 테이블 이름을 사용할 수 없습니다 ( "관계가 존재하지 않습니다")

SQL

단순히 PostgreSQL의 테이블 이름을 사용할 수 없습니다 ( "관계가 존재하지 않습니다")

나는 간단한 데이터베이스 쿼리를 수행하기 위해 다음과 같은 PHP 스크립트를 실행하기 위해 노력하고있어 :

$db_host = "localhost";
$db_name = "showfinder";
$username = "user";
$password = "password";
$dbconn = pg_connect("host=$db_host dbname=$db_name user=$username password=$password")
    or die('Could not connect: ' . pg_last_error());

$query = 'SELECT * FROM sf_bands LIMIT 10';
$result = pg_query($query) or die('Query failed: ' . pg_last_error());

이것은 다음과 같은 오류가 발생합니다 :

그들의 테이블 이름에 대문자를 사용하기 때문에 사람이 존재하지 않는 관계를 나타내는 오류를 얻을 수 어디서 찾을 수있는 모든 예에서, 그것은이다. 내 테이블 이름은 대문자가 없습니다. 즉 showfinder.sf_bands, 데이터베이스 이름을 포함하지 않고 내 테이블을 쿼리 할 수있는 방법이 있습니까?

해결법

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

    1.난 당신이 올바르게 테이블 이름을 참조하지 않을 것을,이 오류가 수단을 읽은에서. 하나는 일반적인 이유는 테이블이 혼합 된 경우 맞춤법에 정의되어 있는지, 당신은 모두 소문자로 쿼리를 위해 노력하고 있습니다.

    난 당신이 올바르게 테이블 이름을 참조하지 않을 것을,이 오류가 수단을 읽은에서. 하나는 일반적인 이유는 테이블이 혼합 된 경우 맞춤법에 정의되어 있는지, 당신은 모두 소문자로 쿼리를 위해 노력하고 있습니다.

    즉, 다음과 같은 실패 :

    CREATE TABLE "SF_Bands" ( ... );
    
    SELECT * FROM sf_bands;  -- ERROR!
    

    테이블이 정의 된대로 특정 혼합의 경우 철자를 사용할 수 있도록를 단락 식별자에 큰 따옴표를 사용합니다.

    SELECT * FROM "SF_Bands";
    

    귀하의 코멘트 다시, 당신은 "search_path의"에 스키마를 추가 할 수 있도록 당신이 스키마 자격이없는 테이블 이름을 참조 할 때, 쿼리가 순서대로 검사 각 스키마에 의해 해당 테이블 이름과 일치하는 것이다. 그냥 PHP에서 쉘 또는의 include_path에서 PATH와 같은 등 당신은 당신의 현재 스키마 검색 경로를 확인할 수 있습니다 :

    SHOW search_path
      "$user",public
    

    당신은 당신의 스키마 검색 경로를 변경할 수 있습니다 :

    SET search_path TO showfinder,public;
    

    또한 http://www.postgresql.org/docs/8.3/static/ddl-schemas.html 참조

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

    2.나는이 문제를했고이 (슬프지만 진실) 이야기이다 :

    나는이 문제를했고이 (슬프지만 진실) 이야기이다 :

    나는이 같은 쓸모없는 물건을 기억처럼 해달라고하지만 당신은에 있습니다)

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

    3.포스트 그레스는 다른 RDMS에서 쿼리 다른를 처리합니다. 이 같은 테이블 이름 앞에 큰 따옴표에 스키마 이름을 넣어 "SCHEMA_NAME". "SF_Bands"

    포스트 그레스는 다른 RDMS에서 쿼리 다른를 처리합니다. 이 같은 테이블 이름 앞에 큰 따옴표에 스키마 이름을 넣어 "SCHEMA_NAME". "SF_Bands"

  4. ==============================

    4.연결 문자열에서 DBNAME 매개 변수를 넣습니다. 모든 다른 실패하면서 나를 위해 작동합니다.

    연결 문자열에서 DBNAME 매개 변수를 넣습니다. 모든 다른 실패하면서 나를 위해 작동합니다.

    선택을 할 때 또한이 같은 your_schema.your_table을 지정합니다 :

    select * from my_schema.your_table
    
  5. ==============================

    5.나는 OSX에 비슷한 문제가 있었지만 단일 및 이중 따옴표와 함께 놀러 노력했다. 귀하의 경우를 들어, 당신은 이런 식으로 뭔가를 시도 할 수

    나는 OSX에 비슷한 문제가 있었지만 단일 및 이중 따옴표와 함께 놀러 노력했다. 귀하의 경우를 들어, 당신은 이런 식으로 뭔가를 시도 할 수

    $query = 'SELECT * FROM "sf_bands"'; // NOTE: double quotes on "sf_Bands"
    
  6. ==============================

    6.이건 정말 도움이됩니다

    이건 정말 도움이됩니다

    SET search_path TO schema,public;
    

    좀 더이 문제를 팠, 현재 데이터베이스에 새 사용자에 대한 defoult하여 "search_path의"를 설정하는 방법에 대해 알아 냈어.

    열기 데이터베이스 속성 열린 시트 "변수" 단순히 실제 값과 사용자를 위해이 변수를 추가합니다.

    이제 사용자는 기본적으로이 SCHEMA_NAME을 얻을 것이다 당신은 스키마 이름없이 테이블 이름을 사용할 수 있습니다.

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

    7.당신은 인용 부호의 스키마 이름과 테이블 이름을 작성해야합니다. 아래:

    당신은 인용 부호의 스키마 이름과 테이블 이름을 작성해야합니다. 아래:

    select * from "schemaName"."tableName";
    
  8. ==============================

    8.나에게 문제가 장고를 초기화하는 동안 나는 그 특정 테이블에 쿼리를 사용하고 있음을이었다. 해당 테이블이 존재하지 않았기 때문에 물론 그 다음, 오류가 발생합니다. 내 경우,이 소프트웨어 (이 경우 마이그레이션에) 어떤 종류의 조작을 실행 할 때마다 실행 된 admin.py 파일 내에서 get_or_create 방법이었다. 누군가가 도움이되기를 바랍니다.

    나에게 문제가 장고를 초기화하는 동안 나는 그 특정 테이블에 쿼리를 사용하고 있음을이었다. 해당 테이블이 존재하지 않았기 때문에 물론 그 다음, 오류가 발생합니다. 내 경우,이 소프트웨어 (이 경우 마이그레이션에) 어떤 종류의 조작을 실행 할 때마다 실행 된 admin.py 파일 내에서 get_or_create 방법이었다. 누군가가 도움이되기를 바랍니다.

  9. from https://stackoverflow.com/questions/695289/cannot-simply-use-postgresql-table-name-relation-does-not-exist by cc-by-sa and MIT license