[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.난 당신이 올바르게 테이블 이름을 참조하지 않을 것을,이 오류가 수단을 읽은에서. 하나는 일반적인 이유는 테이블이 혼합 된 경우 맞춤법에 정의되어 있는지, 당신은 모두 소문자로 쿼리를 위해 노력하고 있습니다.
난 당신이 올바르게 테이블 이름을 참조하지 않을 것을,이 오류가 수단을 읽은에서. 하나는 일반적인 이유는 테이블이 혼합 된 경우 맞춤법에 정의되어 있는지, 당신은 모두 소문자로 쿼리를 위해 노력하고 있습니다.
즉, 다음과 같은 실패 :
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.나는이 문제를했고이 (슬프지만 진실) 이야기이다 :
나는이 문제를했고이 (슬프지만 진실) 이야기이다 :
나는이 같은 쓸모없는 물건을 기억처럼 해달라고하지만 당신은에 있습니다)
-
==============================
3.포스트 그레스는 다른 RDMS에서 쿼리 다른를 처리합니다. 이 같은 테이블 이름 앞에 큰 따옴표에 스키마 이름을 넣어 "SCHEMA_NAME". "SF_Bands"
포스트 그레스는 다른 RDMS에서 쿼리 다른를 처리합니다. 이 같은 테이블 이름 앞에 큰 따옴표에 스키마 이름을 넣어 "SCHEMA_NAME". "SF_Bands"
-
==============================
4.연결 문자열에서 DBNAME 매개 변수를 넣습니다. 모든 다른 실패하면서 나를 위해 작동합니다.
연결 문자열에서 DBNAME 매개 변수를 넣습니다. 모든 다른 실패하면서 나를 위해 작동합니다.
선택을 할 때 또한이 같은 your_schema.your_table을 지정합니다 :
select * from my_schema.your_table
-
==============================
5.나는 OSX에 비슷한 문제가 있었지만 단일 및 이중 따옴표와 함께 놀러 노력했다. 귀하의 경우를 들어, 당신은 이런 식으로 뭔가를 시도 할 수
나는 OSX에 비슷한 문제가 있었지만 단일 및 이중 따옴표와 함께 놀러 노력했다. 귀하의 경우를 들어, 당신은 이런 식으로 뭔가를 시도 할 수
$query = 'SELECT * FROM "sf_bands"'; // NOTE: double quotes on "sf_Bands"
-
==============================
6.이건 정말 도움이됩니다
이건 정말 도움이됩니다
SET search_path TO schema,public;
좀 더이 문제를 팠, 현재 데이터베이스에 새 사용자에 대한 defoult하여 "search_path의"를 설정하는 방법에 대해 알아 냈어.
열기 데이터베이스 속성 열린 시트 "변수" 단순히 실제 값과 사용자를 위해이 변수를 추가합니다.
이제 사용자는 기본적으로이 SCHEMA_NAME을 얻을 것이다 당신은 스키마 이름없이 테이블 이름을 사용할 수 있습니다.
-
==============================
7.당신은 인용 부호의 스키마 이름과 테이블 이름을 작성해야합니다. 아래:
당신은 인용 부호의 스키마 이름과 테이블 이름을 작성해야합니다. 아래:
select * from "schemaName"."tableName";
-
==============================
8.나에게 문제가 장고를 초기화하는 동안 나는 그 특정 테이블에 쿼리를 사용하고 있음을이었다. 해당 테이블이 존재하지 않았기 때문에 물론 그 다음, 오류가 발생합니다. 내 경우,이 소프트웨어 (이 경우 마이그레이션에) 어떤 종류의 조작을 실행 할 때마다 실행 된 admin.py 파일 내에서 get_or_create 방법이었다. 누군가가 도움이되기를 바랍니다.
나에게 문제가 장고를 초기화하는 동안 나는 그 특정 테이블에 쿼리를 사용하고 있음을이었다. 해당 테이블이 존재하지 않았기 때문에 물론 그 다음, 오류가 발생합니다. 내 경우,이 소프트웨어 (이 경우 마이그레이션에) 어떤 종류의 조작을 실행 할 때마다 실행 된 admin.py 파일 내에서 get_or_create 방법이었다. 누군가가 도움이되기를 바랍니다.
from https://stackoverflow.com/questions/695289/cannot-simply-use-postgresql-table-name-relation-does-not-exist by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 2008 관리 스튜디오 내 쿼리의 구문을 확인하지 (0) | 2020.03.12 |
---|---|
[SQL] 날짜를 삽입하는 동안 문자열에서 날짜 및 / 또는 시간을 변환 할 때 변환 실패 (0) | 2020.03.12 |
[SQL] MySQL의 큰 테이블에서 임의의 행의 빠른 선택 (0) | 2020.03.12 |
[SQL] MySQL의 삽입 어디 쿼리 (0) | 2020.03.12 |
[SQL] SQL에서 단일 및 이중 따옴표의 차이점은 무엇입니까? (0) | 2020.03.12 |