[解決済み】PostgreSQLのテーブル名を単純に使用できない(「関係が存在しない」)。
2022-04-05 10:32:43
質問
以下の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());
この場合、以下のようなエラーが発生します。
クエリーに失敗しました。ERROR: relation "sf_bands" does not exist
リレーションが存在しないというエラーが発生したすべての例で、テーブル名に大文字を使用していることが原因です。私のテーブル名には大文字がありません。データベース名を含まずに、私のテーブルを照会する方法はありますか?
showfinder.sf_bands
?
解決方法は?
私が読んだ限りでは、このエラーは、テーブル名を正しく参照していないことを意味します。 よくある原因としては、テーブルが大文字と小文字の混在した綴りで定義されていて、それをすべて小文字にして問い合わせようとしていることが挙げられます。
つまり、以下のように失敗します。
CREATE TABLE "SF_Bands" ( ... );
SELECT * FROM sf_bands; -- ERROR!
ダブルクォートを使って識別子を区切ることで、テーブルの定義通りに特定の大文字小文字の混在したスペルを使用することができます。
SELECT * FROM "SF_Bands";
コメントについてですが、"search_path"にスキーマを追加することで、スキーマを修飾せずにテーブル名を参照した場合、クエリが各スキーマを順にチェックしながらそのテーブル名と一致させることができます。 ちょうど
PATH
をシェルで、または
include_path
を PHP などで使用することができます。 現在のスキーマ検索パスを確認することができます。
SHOW search_path
"$user",public
スキーマ検索パスを変更することができます。
SET search_path TO showfinder,public;
参照 http://www.postgresql.org/docs/8.3/static/ddl-schemas.html
関連
-
[解決済み】Weird PHP error: 'Can't use function return value in write context'.
-
[解決済み】未定義のメソッド mysqli_stmt::get_result を呼び出す。
-
[解決済み】子テーマのCSSが親テーマをオーバーライドしない
-
[解決済み] psql: FATAL: データベース "<user>" が存在しない
-
[解決済み] PostgreSQLで「カラムが存在しない」と表示されるが、実際には存在する
-
[解決済み] 最初の行への結合方法
-
[解決済み] コマンドライン引数でPostgreSQLの.sqlファイルを実行する
-
[解決済み] オラクル:テーブルが存在する場合
-
[解決済み】PostgreSQLのエラーです。Fatal: ロール "username" が存在しません。
-
[解決済み】psql: FATAL: ロール "postgres" が存在しない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PHP - 構文エラー、予期しないT_CONSTANT_ECAPSED_STRING [閉店].
-
[解決済み】XAMPPポート80をPID 4の「Unable to open process」が使用中 [重複] XAMPPポート80をPID 4の「Unable to open process」が使用中。]
-
[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。
-
[解決済み】不明なMySQLサーバーのホスト
-
[解決済み】XAMPPエラー: www.example.com:443:0 サーバー証明書に、サーバー名と一致するIDが含まれていません。
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】子テーマのCSSが親テーマをオーバーライドしない
-
phpのAllowed memory size of 134217728 bytes枯渇問題の解決法
-
[解決済み] Forbidden :このサーバーの /phpmyadmin にアクセスする権限がありません。