0

MySQLで作業していたプロジェクトがあります。

何百ものクエリがあり、一部のテーブル名と列名が大文字になっているのはそのためです

のようなクエリ

 select  * from TEST

引用符なしでは pgSQL では機能しません。

では、すべてのクエリを変更しないソリューションを誰かに教えてもらえますか?

4

2 に答える 2

1

テーブル名に関する最も簡単なことは、次のように引用符を付けずにテーブルを作成することです。

create table "TEST"     -- BAD
create table TEST       -- good
create table test       -- even better

また、クエリでは、テーブル名または列名を引用符で囲んではなりません。

select "TEST"."COLUMN" from "TEST"    -- BAD
select TEST.COLUMN from TEST          -- good
select test.column from test          -- even better

引用符で囲まれていない識別子は自動的に小文字に変換されるため、最後の 2 つのバージョンは PostgreSQL と同じです。

どこにでも(クエリDDLに)引用符がないことを確認して、その部分を完了してください。

編集:psql引用構文を使用してテーブルを作成し、それらがシェルで大文字または大文字と小文字が混在して表示される場合、テーブルの名前を変更できます。

alter table "TEST" rename to TEST;    -- or "to test" - doesn't matter

コマンドを生成する簡単な方法を次に示します。これをpsql自分でコピーしてシェルに貼り付ける必要があります。

select 
    'alter table "' || table_schema || '"."' || table_name || '" to ' ||
    lower(table_name) 
from information_schema.tables 
where table_type = 'BASE TABLE' and table_name != lower(table_name);

              ?column?               
-------------------------------------
 alter table "public"."TEST" to test

根拠 すべてのクエリに対して 1 つの標準を使用する必要があります。すべて引用符なし (実際のテーブル名は小文字に変換されている必要があります) またはすべて引用符付き (実際のテーブル名は文字どおりに一致する必要があります) のいずれかです。混合は、多くの苦痛なしでは不可能です。

通常、誰も大騒ぎして手書きのクエリに引用符を追加することはありません。したがって、この標準に落ち着くのは、そうでない場合よりも手間がかからないことを期待しています。つまり、PostgreSQL のベスト プラクティスに従ってテーブルの名前を変更する必要があります。

于 2012-08-01T08:02:43.280 に答える
-1

1つもありません。MySQL は SQL と互換性のないいくつかの構文拡張を使用し (PostgreSQL も同様)、自動的に変換するのが非常に難しいクエリ (GROUP BY、DISTINCT) にはいくつかの大きな違いがあります。

TL;DR; クエリを手動で修正し、それらがまったく同じように動作することを確認する以外に選択肢はありません (特定の方法ではありません)。

于 2012-08-01T07:38:36.963 に答える