目覚めのプログラミング

プログラミングに関することを気ままにシンプルを心掛けて書いていきます

PostgreSQL テーブル名・カラム名を大文字にした場合のSQLの書き方

確認バージョン:PostgreSQL 13

 

PostgreSQLのテーブル名やカラム名などオブジェクトにつける名前は、すべて小文字にしておく方が無難です。

 

SQL発行時に大文字が小文字に変換されてしまうため、以下のように「存在しません」といったエラーになります。

f:id:jobcsuzuki:20211008212016j:plain

SQLはTEST_TABLE1としていますが、実行するとtest_table1で判断されます。

そのため、エラーでtest_table1となっています。
実際のテーブル名は、TEST_TABLE1なのでテーブルが「ない」と判断されています。

 

ただEntityFramework等の影響で思うように小文字だけでできないこともあります。

大文字がある場合のSQLの書き方を記載します。

 

対応方法

 大文字を含む項目部分を" "(ダブルコーテーション)で囲います。

 

例1:大文字を含むテーブルの場合
SELECT testcol1 FROM "TEST_TABLE1"
例2:大文字を含むカラムの場合
SELECT "testCol1" FROM test_table1 
例3:テーブル別名を使う場合
SELECT tbl1."testCol1" FROM "TEST_TABLE1" tbl1

 

参考

pgAdmin4で大文字を含めたときのCreate文が以下のようになっていますので、この辺りを参考するとよいかと思います。

※testcol4だけが小文字です。

CREATE TABLE public."tbl_Test2"
(
    "testCol1" character(2) COLLATE pg_catalog."default" NOT NULL,
    "TestCol2" integer,
    "TESTCOL3" character(10) COLLATE pg_catalog."default",
    testcol4 character(1) COLLATE pg_catalog."default",
    CONSTRAINT "TBL_TEST2_pkey" PRIMARY KEY ("testCol1")
)

TABLESPACE pg_default;

ALTER TABLE public."tbl_Test2"
    OWNER to postgres;

Web.configでappSettingsの定義名を同じにした場合の取得される値

Web.configでappSettingsの定義名が重複していた場合は、一番下に記載したものが採用されます。以下のように試してみました。

 

パターン1:同じkey2つ

同じキーを2つ設定する。

設定
<appSettings>
    ・・・
  <add key="TestData" value="bbb" />
  <add key="TestData" value="aaa" />
</appSettings>
結果

 2つ目のaaaが設定される

f:id:jobcsuzuki:20211006144353j:plain

 

パターン2:同じkey3つ

パターン1に加えて一番下に同じキーを1つ追加する。

設定
<appSettings>
    ・・・
  <add key="TestData" value="bbb" />
  <add key="TestData" value="aaa" />
  <add key="TestData" value="ccc" />
</appSettings>
結果

 一番下のcccが設定される

f:id:jobcsuzuki:20211006140727j:plain

 

ソースで全キーを確認してみる

ConfigurationManager.AppSettingsの中を見てみるとTestDataは1つしかない

f:id:jobcsuzuki:20211006143510j:plain

 

 

 

Web.configにアプリケーションで使う任意の設定値を追加する(appSettingsの設定)

Web.configでアプリケーションで使う設定値の設定方法と使い方です。

Web.configファイルとソースを修正することになります。

 

Web.config

  Web.configのappSettingsタグの中にKey・value(キーと値)の形で追加します。

  key ・・・ プログラムで呼び出すときに使う設定値の名前

  value ・・・ プログラムで取得したい実際の設定値

 

  appconfigの中であればどこに追加しても大丈夫ですが、

  同じ名前のkeyがある場合は下に記載したものが優先されます。

    →参考:Web.configでappSettingsの定義名を2つ以上同じにした場合

 

  以下の例では2つの設定値を追加しています。赤字が追加箇所です。

<configuration>
    <configsections>
     <section・・・
    </configsections>
    <connectionStrings>
     <add・・・
    </connectionStrings>
    <appSettings>
      <add key="webpages:Version" value="3.0.0.0" />
      <add key="webpages:Enabled" value="false" />
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
     <add key="TestPath" value="C:\inetpub\temp" />
     <add key="TestData" value="ABCDE12345" />
    </appSettings>
    <system.web>
     ・・・
    </system.web>
</configuration>

 

ソースからの読込その1 (C#)

    Web.configで設定した定義を1つずつ読み込むシンプルな例になります。

    赤字が読み込みに必要なコードです。

using System.Configuration;
・・・
public class TestConfig
{
    // TestPathキーを読込
    String path = ConfigurationManager.AppSettings["TestPath"]
    // TestDataキーを読込
    String data = ConfigurationManager.AppSettings["TestData"]
}

 

ソースからの読込その2 (C#)

    Web.configで設定したappSettingsの定義を全部取得した後、必要な定義を使う例になります。

    赤字が読み込みに必要なコードです。

using System.Configuration;
using System.Collections.Specialized;
・・・
public class TestConfig
{
    // appsettings情報を全て読込
    NameValueCollection settings = ConfigurationManager.AppSettings;
    // 読込した定義情報からTestPathキーを取得
    String path = settings["TestPath"];
    // 読込した定義情報からTestDataキーを取得
    String data = settings["TestData"];
}

 

どちらでも結果は同じ値を取得します。

path には文字列で C:\inetpub\temp がセットされます。

data には文字列で ABCDE12345 がセットされます。

EXCEL関数 表からキーを指定してデータを取得したい(HLOOKUP)

複数行列の表から、キーを指定して値を取り出すときに使います。

ただし、横の列方向に対してのみ検索されます。

 →参考:VLOOKUP関数

 →参考:INDEX+MATCH関数

 

書き方

 =HLOOKUP(①,②,③)

 ①横に検索したいキー

 ②表を指定する

 ③取得したい表のデータの列目

 

 ②の表の一番上の行を、①のキーで探します。

f:id:jobcsuzuki:20211005234556j:plain

 

3行5列の表の中から、「番号」を指定することで名前のデータを取得しています。

f:id:jobcsuzuki:20211005235103j:plain

 



 

AndroidStudioのビルド(Gradle)でエラーが出る

AndroidStudioで何かしらのアップデートが行われた後、ビルド(Gradle)でエラーになって実行できなくなってしまいました。

エラーメッセージとしては、メモリが確保できないといったメッセージなのですが、空きメモリは足りており、今までも実行できていた状態でした。

 

エラーメッセージ

Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the User Manual chapter on the daemon at https://docs.gradle.org/6.7.1/userguide/gradle_daemon.html
Process command line: C:\Program Files (x86)\Java\jdk1.8.0_112\bin\java.exe -Xmx2048m -Dfile.encoding=UTF-8 -Duser.country=JP -Duser.language=ja -Duser.variant -cp (gradleフォルダ.gradleの場所)\wrapper\dists\gradle-6.7.1-bin\bwlcbys1h7rz3272sye1xwiv6\gradle-6.7.1\lib\gradle-launcher-6.7.1.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 6.7.1
Please read the following process output to find out more:
-----------------------
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap

-----------------------
Check the JVM arguments defined for the gradle process in:
 - gradle.properties in project root directory

 

実際のエラー画面

f:id:jobcsuzuki:20211004133718j:plain

 

対処方法

Gradleの仕組みを把握できていないため原因自体はわかっていませんが、以下のようにJVMのヒープメモリサイズ(Xmx)を小さくすることでビルドできるようになりました。(ビルドが遅くなりそうですが)

 

・エラーメッセージの中にあるgradle.propertiesにリンクが貼ってあるので選択する。

 ※リンクがない場合はプロジェクトフォルダの直下にgradle.propertiesがあります。

f:id:jobcsuzuki:20211004130908j:plain

・gradle.propertiesの中のorg.gradle.jvmargs=-Xmx2048m のXmxの後の数値の部分を小さくする。

 Xmx2048→Xmx1024

f:id:jobcsuzuki:20211004135847j:plain

 

AndroidStudioを更新した後、起動するとエラーが出る

日本語化しているAndroidStudioで更新通知が出て更新した後、AndroidStudioが起動できなくなる時があります。

何度かはこの方法で対応できましたので覚書で記載します。

 

エラー内容

エラーは以下のようなメッセージが出てます。

!bootstrap.error.message.internal.error.please.refer.to.0!https://code.google.com/p/android/issues!
java.util.concurrent.ExecutionException: java.lang.VerifyError: Expecting a stack map frame
・・・    
実際のエラー画面

f:id:jobcsuzuki:20211001205610j:plain

 

対処法

日本語プラグインの最新版を入れなおすことで起動できるようになります。

 

プラグインダウンロード元のURLを開きます。

https://mergedoc.osdn.jp/#pleiades.html

f:id:jobcsuzuki:20211001205607j:plain

 

windowsを選択するとZIPファイルがダウンロードされます。

・ZIPファイルを解凍し、中のsetup.exeを起動します。

・以下のように日本語化するアプリを選択する画面が表示されます。

  f:id:jobcsuzuki:20211002001650j:plain

・日本語化するアプリケーションの横にある選択ボタンを押して、AndroidStudioのbinフォルダにあるstudio64.exe(32bitの時はstudio.exeかな?)を選択します。

  f:id:jobcsuzuki:20211002002850j:plain

・「日本語化」するボタンを押します。

・完了のメッセージボックスが表示されるので、「OK」ボタンを押します。

 f:id:jobcsuzuki:20211002003126j:plain

・「終了」ボタンを押します。

 

これで起動できるようになります。

 

EXCEL関数 表からキーを指定してデータを取得したい(VLOOKUP)

複数行列の表から、キーを指定して値を取り出すときに使います。

ただし、縦の行方向だけです。

 →参考:INDEX+MATCH関数

 →参考:HLOOKUP関数

 

書き方

 =VLOOKUP(①,②,③)

 ①検索するキー

 ②表を指定する

 ③取得したい表のデータの列目

 

 ②の表の一番左端の列にある①データを探すことになります。

f:id:jobcsuzuki:20211001012837j:plain

 

5行3列の表の中から、「番号」を指定することで名前のデータを取得しています。

f:id:jobcsuzuki:20211001012304j:plain