2012-01-04 8 views
0

私たちの製品のmysqlからpostgresqlへデータベースを移行します(java経由)。したがって、mysqlクエリをpostgresqlクエリに変更する必要があります。 postgresqlにテーブル、つまりdatabasename.tablenameを作成する方法。 mysqlの場合、create table information.employeeのようなテーブルを直接作成することができます。 データベース名は「情報」、テーブル名は「従業員」です。 postgresqlで同じクエリを実行することは可能ですか?PostgreSQLで "MySQLクロスデータベースリファレンス"を達成する方法

私はグーグルを検索して、クロスデータベース参照は不可能であると言います。私を助けてください。 pg_classテーブルには、特定のデータベースのテーブル名が含まれていることがわかりました。たとえば、賢明なデータベースやテーブルの関係は他のテーブルに格納されています。

+0

質問を明確にしてください。 MySQLからPostgreSQLへのステートメントの変換方法に関する情報が必要な場合は、MySQLのステートメントまたは仕様の一部を提供してください。 MySQLがデータベースと呼ぶものを参照する方法についての情報が必要な場合は、今日どのようにMySQLで行うのかの例を挙げてください。 – zrvan

+0

こんにちはzrvan、ありがとうございました。はい、私はpostgresqlにmysql文を変換したいと思います。例えば、mysqlにはn個のデータベースがあります。それらは、select * from dbname.tablenameのようにアクセスします。 postgresqlで同じクエリを実行することは可能ですか? –

+0

prathika:あなたの質問を編集して、実際のMySQLのクエリ(またはオリジナルに機密情報が含まれている場合に似ている文)を追加してください。テーブル作成ステートメントと実際のデータ抽出クエリの両方のサポートが必要な場合は、現在のMySQLフォームに表示されているように両方の種類の例を追加してください。 – zrvan

答えて

3

これは通常、データベースではなくスキーマを使用して行われます。これは、MySQLの仕組みとほぼ同じです。

代わりの

create database xyz 

使用

create schema xyz 

テーブルを作成する、それらを作成します。

create table xyz.myTable 

あなたはpsqlの上でそれらを見るためにあなたの検索パスを更新する必要がありますまたはスキーマを明示的に使用せずにクエリを実行する場合に使用します。デフォルトのスキーマはパブリックなので、スキーマ名を持たない表を作成すると、パブリックになります。 search_pathを以下のように変更すると、デフォルトのスキーマがリストの最初のxyzになります。

set search_path=xyz,public,pg_catalog; 

この声明にはスペースを入れてはいけません。あなたはあまりにもユーザー/ロールに対してグローバルに行うことができます。

alter role webuser set search_path=xyz,public,pg_catalog; 

をまた、PostgreSQLの文字列の一致が(この1つは多くの人々をキャッチする)場合、デフォルトでは小文字が区別されていることを忘れないでください。 各スキーマのファイルの物理的な位置を異ならせたい場合は、表スペースでそれを行うことができます。もしあなたがpostgresqlのドキュメントページを見ていれば、それを行う方法に関する情報がありますが、それはかなり簡単です。

+0

他のスキーマで動作するようにsearch_pathを更新する必要はありません**、SQL文で明示的に指定することができます。 search_pathの更新は便利です。 –

+0

これは当てはまりますが、必要はありませんが、psqlのコマンドラインで\ dのような関係を表示するには、必要があります。表示されない場合は混乱しますそれで、私はちょうど正気のためにそれをすることをお勧めしたいと思います - 私は反映するために更新されます。 – PlexQ

関連する問題