CREATE DATABASE - Amazon Redshift

CREATE DATABASE

新しいデータベースを作成します。

トランザクションブロック (BEGIN ... END) 内で CREATE DATABASE を実行することはできません。トランザクションの詳細については、「直列化可能分離」を参照してください。

Syntax

CREATE DATABASE database_name [ WITH ] [ OWNER [=] db_owner ] [ CONNECTION LIMIT { limit | UNLIMITED } ] [ COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE ]

Parameters

database_name

新しいデータベースの名前。有効な名前の詳細については、「名前と識別子」を参照してください。

WiTH

オプションキーワード

OWNER

データベース所有者を指定します。

=

オプションの文字。

db_owner

データベース所有者のユーザー名。

CONNECTION LIMIT { limit | UNLIMITED }

ユーザーが同時に開けるデータベース接続の最大数。この制限はスーパーユーザーには適用されません。同時接続の最大数を許可するには、UNLIMITED キーワードを使用します。ユーザーごとの接続数の制限が適用される場合もあります。詳細については、「CREATE USER」を参照してください。デフォルトは UNLIMITED です。現在の接続を確認するには、STV_SESSIONS システムビューに対してクエリを実行します。

注記

ユーザーとデータベースの両方の接続制限が適用される場合は、ユーザーが接続しようとしたときに、両方の制限内に未使用の接続スロットがなければなりません。

COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE

文字列の検索または比較が CASE_SENSITIVE か CASE_INSENSITIVE かを指定する句。デフォルトは CASE_SENSITIVE です。

データ共有で CREATE DATABASE を使用するための構文

次の構文で、同じ AWS アカウント内のデータ共有からデータベースを作成するために使用される、CREATE DATABASE コマンドについて確認できます。

CREATE DATABASE database_name FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid

次の構文で、AWS アカウント間のデータ共有からデータベースを作成するために使用される,CREATE DATABASE コマンドについて確認できます。

CREATE DATABASE database_name FROM DATASHARE datashare_name OF ACCOUNT account_id NAMESPACE namespace_guid

データ共有で CREATE DATABASE を使用するためのパラメータ

FROM DATASHARE

データ共有の場所を示すキーワード。

datashare_name

コンシューマデータベースが作成されるデータ共有の名前。

NAMESPACE namespace_guid

データ共有が属しているプロデユーサ名前空間を指定する値。

ACCOUNT account_id

データ共有が属しているプロデユーサアカウントを指定する値。

データ共有のための CREATE DATABASE の使用上の注意

コンシューマアカウントの管理者として、CREATE DATABASE を使用して AWS アカウント内のデータ共有からデータベースを作成する場合は、NAMESPACE オプションを指定します。ACCOUNT オプションは省略可能です。

CREATE DATABASE を使用して AWS アカウント間のデータ共有からデータベースを作成する場合は、ACCOUNT オプションと NAMESPACE オプションの両方を指定します。

コンシューマクラスター上の 1 つのデータ共有に対して、作成できるコンシューマデータベースは 1 つだけです。同じデータ共有を参照する、複数のコンシューマデータベースを作成することはできません。

CREATE DATABASE の制限

Amazon Redshift は、データベースに次の制限を適用します。

  • クラスターごとのユーザー定義データベースは最大 60 個です。

  • データベース名は最大 127 バイトです。

  • データベース名を予約語にすることはできません。

データベースの照合

照合とは、データベースエンジンが SQL の文字型データを比較およびソートする方法を定義するための一連の規則です。大文字と小文字が区別されない照合は、最もよく使用されます。Amazon Redshift では、大文字と小文字を区別しない照合を使用して、他のデータウェアハウスシステムからの移行を容易にしています。大文字と小文字を区別しない照合のネイティブサポートにより、Amazon Redshift は、分散キー、ソートキー、範囲が制限されたスキャンなど、重要な調整法や最適化の方法を引き継ぐことができます。

COLLATE 句により、データベース内のすべての CHAR および VARCHAR 列に対する、デフォルトの照合手段を指定します。CASE_INSENSITIVE が指定されている場合、すべての CHAR または VARCHAR 列では、大文字と小文字を区別しない照合が使用されます。照合の詳細については、「照合順序」を参照してください。

大文字と小文字を区別しない列に挿入または取り込んだデータは、元の大文字と小文字を維持します。ただし、ソートやグループ化など、すべての比較ベースの文字列操作は、大文字と小文字を区別しません。LIKE 述語、および正規表現関数などのパターンマッチング操作でも、大文字と小文字を区別しません。

次の SQL オペレーションでは、適切な照合セマンティクスをサポートします。

  • 比較演算子:=、<>、<、<=、>、>=

  • LIKE 演算子

  • ORDER BY 句

  • GROUP BY 句

  • MIN、MAX、LISTAGG など、文字列比較を使用する集計関数

  • PARTITION BY 句や ORDER BY 句などのウィンドウ関数

  • スカラー関数: greatest() 、least()、STRPOS()、REGEXP_COUNT()、REGEXP_REPLACE()、REGEXP_INSTR()、REGEXP_SUBSTR()

  • Distinct 句

  • UNION、INTERSECT、および EXCEPT

  • IN LIST

Amazon Redshift Spectrum および Aurora PostgreSQL のフェデレーティッドクエリを含む外部クエリの場合、VARCHAR または CHAR 列の照合は、現行のデータベースレベルの照合と同じです。

次の例では、Amazon Redshift Spectrum テーブルをクエリしています。

SELECT ci_varchar FROM spectrum.test_collation WHERE ci_varchar = 'AMAZON'; ci_varchar ---------- amazon Amazon AMAZON AmaZon (4 rows)

データベースの照合を使用してテーブルを作成する方法については、「CREATE TABLE」を参照してください。

COLLATE 関数の詳細については、「COLLATE 関数」を参照してください。

データベース照合の制限

Amazon Redshift でデータベース照合を使用する場合、以下の制限事項があります。

  • PG カタログテーブルや Amazon Redshift システムテーブルなど、すべてのシステムテーブルまたはビューでは、大文字と小文字が区別されます。

  • コンシューマデータベースとプロデューサデータベースに異なるデータベースレベルの照合順序がある場合、Amazon Redshift はデータベース間クエリとクラスター間クエリをサポートしません。

  • Amazon Redshift は、リーダーノードのみのクエリで大文字と小文字を区別しない照合をサポートしていません。

    以下に、サポートされていない大文字と小文字を区別しないクエリと、Amazon Redshift から送信されるエラーの例を示します。

    SELECT collate(usename, 'case_insensitive') FROM pg_user; ERROR: Case insensitive collation is not supported in leader node only query.
  • Amazon Redshift は、比較、関数、結合、設定オペレーションなど、大文字と小文字を区別する列と区別しない列間でのやり取りはサポートしていません。

    次に、大文字と小文字を区別する列と区別しない列の間で、やり取りした際に発生するエラーの例を示します。

    CREATE TABLE test (ci_col varchar(10) COLLATE case_insensitive, cs_col varchar(10) COLLATE case_sensitive, cint int, cbigint bigint);
    SELECT ci_col = cs_col FROM test; ERROR: Query with different collations is not supported yet.
    SELECT concat(ci_col, cs_col) FROM test; ERROR: Query with different collations is not supported yet.
    SELECT ci_col FROM test UNION SELECT cs_col FROM test; ERROR: Query with different collations is not supported yet.
    SELECT * FROM test a, test b WHERE a.ci_col = b.cs_col; ERROR: Query with different collations is not supported yet.
    Select Coalesce(ci_col, cs_col) from test; ERROR: Query with different collations is not supported yet.
    Select case when cint > 0 then ci_col else cs_col end from test; ERROR: Query with different collations is not supported yet.
  • Amazon Redshift は SUPER データ型の照合をサポートしていません。大文字と小文字を区別しないデータベースでの SUPER 列の作成、および SUPER 列と大文字文字を区別しない列間のやり取りはサポートされていません。

    次の例では、大文字と小文字を区別しないデータベースに、データ型に SUPER を使用するテーブルを作成しています。

    CREATE TABLE super_table (a super); ERROR: SUPER column is not supported in case insensitive database.

    次の例では、SUPER データと比較しながら、大文字と小文字を区別しない文字列を使用するデータをクエリしています。

    CREATE TABLE test_super_collation (s super, c varchar(10) COLLATE case_insensitive, i int);
    SELECT s = c FROM test_super_collation; ERROR: Coercing from case insensitive string to SUPER is not supported.

これらのクエリを機能させるには、COLLATE 関数を使用して、ある列に対する照合を、別の列と一致するように変換します。詳細については、「COLLATE 関数」を参照してください。

Examples

データベースを作成する

次の例では、TICKIT という名前のデータベースを作成し、その所有権を DWUSER というユーザーに与えます。

create database tickit with owner dwuser;

データベースに関する詳細を表示するために、PG_DATABASE_INFO カタログテーブルに対しクエリを実行しています。

select datname, datdba, datconnlimit from pg_database_info where datdba > 1; datname | datdba | datconnlimit -------------+--------+------------- admin | 100 | UNLIMITED reports | 100 | 100 tickit | 100 | 100

次の例では、データ共有 SalesShare からデータベース Salesdb を作成します。

CREATE DATABASE Sales_db FROM DATASHARE SalesShare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

データベース照合の例

大文字と小文字を区別しないデータベースの作成

次の例では、データベース sampledb 、およびテーブル T1 を作成し、そのテーブル T1 にデータを挿入します。

create database sampledb collate case_insensitive;
connect to sampledb;
CREATE TABLE T1 ( col1 Varchar(20) distkey sortkey );
INSERT INTO T1 VALUES ('bob'), ('john'), ('Mary'), ('JOHN'), ('Bob');

その後、クエリが John を含む結果を検索します。

SELECT * FROM T1 WHERE col1 = 'John'; col1 ------ john JOHN (2 row)

大文字と小文字を区別しない規則での順序付け

次の例は、テーブル T1 での、大文字と小文字を区別しない順序付けを示しています。Bobbob、またはJohnjohn の並びは、大文字と小文字を区別しない列では等しく認識されるため非決定的です。

SELECT * FROM T1 ORDER BY 1; col1 ------ bob Bob JOHN john Mary (5 rows)

同様に次の例では、GROUP BY 句に対する、大文字と小文字を区別しない順序付けを示しています。BobBob は等し認識されるので、同じグループに属します。どちらが結果に表示されるかは非決定的です。

SELECT col1, count(*) FROM T1 GROUP BY 1; col1 | count -----+------ Mary | 1 bob | 2 JOHN | 2 (3 rows)

大文字と小文字を区別しない列でウィンドウ関数を使用してクエリを実行する

次の例では、大文字と小文字を区別しない列に対し、ウィンドウ関数によるクエリを実行します。

SELECT col1, rank() over (ORDER BY col1) FROM T1; col1 | rank -----+------ bob | 1 Bob | 1 john | 3 JOHN | 3 Mary | 5 (5 rows)

DISTINCT キーワードを使用したクエリ

次の例に、DISTINCT キーワードを使用しながら、T1 テーブルに対しクエリを実行します。

SELECT DISTINCT col1 FROM T1; col1 ------ bob Mary john (3 rows)

UNION 句を使用したクエリ

次の例に、テーブル T1 および T2 に対し UNIONN 句を使用した場合の結果を示します。

CREATE TABLE T2 AS SELECT * FROM T1;
SELECT col1 FROM T1 UNION SELECT col1 FROM T2; col1 ------ john bob Mary (3 rows)