- ベストアンサー
PostgreSQLテーブルを作成するスキーマ
PostgreSQLテーブルを作成するスキーマ PostgreSQLにテーブルを作成するのですが、 すでにある資産は publicスキーマに全部作成しているようです。 これってどうなのでしょうか? 簡易的に作る時は何も考えずに、既存のpublicスキーマに作ってしまうのは一般的な事なのでしょうか? それとも、ちゃんと自分でスキーマ作ってから、そこに作るべきなのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>「そんなところに作ってんじゃねーよ! >ちゃんと自分でスキーマ作ってそこに入れてくれ!」 と言って直してもらう程の事です。 何と言っても「共通資源」ですからねぇ。無秩序に 作成/変更/削除されたらどうするんでしょ?
その他の回答 (3)
- SaKaKashi
- ベストアンサー率24% (755/3136)
publicもスキーマの一つですが、一つのスキーマには同じオブジェクトは一つしか作れません。 複数の利用者がいて、例えば、本番用と開発用の利用者がスキーマを作らないとpublicにオブジェクトを作りますが、利用者が違えばデータも変えたいし、時には列を追加したり、削除したりしたいですよね。そんなときにpublicでは同じ名前のオブジェクトは一つですから本番用と開発用を使い分けられないです。 で、どうするかと言うと、本番用と開発用のスキーマを作って、そこに本番用と開発用のオブジェクトを作れば、同じ名前でも異なるスキーマなので問題なく存在できますし、それぞれのデータを変えることが可能です。 ちょっと難解ですけどね。
- nda23
- ベストアンサー率54% (777/1415)
スキーマじゃなくてデータベースじゃないですか? データベース>スキーマという関係です。 両方とも正しく設計して作るものです。 因みに、サーバが同じでもデータベースが異なれば ODBC接続は別物になります。同じデータベース内の 別のスキーマにはスキーマ名で修飾すれば利用できます。
お礼
有り難うございます。 >スキーマじゃなくてデータベースじゃないですか? ここで話題にしたいのはスキーマであってます。 インストールすると以下のデータベースが存在します。 postgres template0 template1 これはさすがにそのまま使えないのでデータベースを作成します。 user_db1 データベースにはデフォルトのオブジェクトがあり、スキーマ群もその一つです。 スキーマ群にはデフォルトで5つのスキーマが存在します。 普通ならここにスキーマを作成してテーブルを作るのが筋です。 user_db1 +キャスト +手続き言語 +スキーマ(5) +information_schema +pg_catalog +pg_toast +pg_temp_1 +public ←←←何も考えず横着してここに作っている +user_table1 +user_table2 +user_schema1 ←←←常識的にはここに作る +user_table1 +user_table2 しかし、残念な事に既にpublicに誰かに作られたテーブルがあります。 「そんなところに作ってんじゃねーよ!ちゃんと自分でスキーマ作ってそこに入れてくれ!」 と言って直してもらう程の事なのか悩んでいます。
- SaKaKashi
- ベストアンサー率24% (755/3136)
ちゃんと自分でスキーマ作ってから、そこに作るべきです。
お礼
ありがとうございます。 私もそうは思うのですが、 「publicに作って何か問題があるでしょうか?」と言われたらどう答えますか?
お礼
ありがとうございます。 本番用と開発用は可能な限り筐体を分離した方が良いです。 筐体を分離していて接続先を切り替えるなら、そういう使い分けは不要です。 そうした前提なら、特にpublicに詰め込んだとして問題は無い訳でしょうか? (少々偏見的な言い回しかもしれませんが)postgresで作ってるぐらいなので大したシステムではなく、テキトーにやっつけで作ってるのですが、そんなノリで作ってるならpublicに何でも詰め込んでしまうのもアリといえばアリなんでしょうか? publicに何でも詰め込んでいる事に関して、既存の物を直させる程の理由があるかどうかが問題です。