CREATE DATABASE - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

CREATE DATABASE

Crée une nouvelle base de données.

Pour créer une base de données, vous devez être super-utilisateur ou disposer du privilège CREATEDB. Pour créer une base de données associée à une intégration zéro ETL, vous devez être un superutilisateur ou disposer des privilèges CREATEDB et CREATEUSER.

Vous ne pouvez pas exécuter CREATE DATABASE au sein d’un bloc de transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez Isolement sérialisable.

Syntaxe

CREATE DATABASE database_name [ { [ WITH ] [ OWNER [=] db_owner ] [ CONNECTION LIMIT { limit | UNLIMITED } ] [ COLLATE { CASE_SENSITIVE | CASE_INSENSITIVE } ] [ ISOLATION LEVEL { SERIALIZABLE | SNAPSHOT } ] } | { [ WITH PERMISSIONS ] FROM DATASHARE datashare_name ] OF [ ACCOUNT account_id ] NAMESPACE namespace_guid } | { FROM { { ARN '<arn>' } { WITH DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA } } | { INTEGRATION '<integration_id>'} } | { IAM_ROLE {default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' } }

Paramètres

database_name

Nom de la nouvelle base de données. Pour plus d’informations sur les noms valides, consultez Noms et identificateurs.

WITH

Mot-clé facultatif.

OWNER

Spécifie un propriétaire de base de données.

=

Caractère facultatif.

db_owner

Nom d’utilisateur du propriétaire de base de données.

CONNECTION LIMIT { limite | UNLIMITED }

Le nombre maximum de connexions à la base de données que les utilisateurs sont autorisés à ouvrir simultanément. La limite se s’applique pas aux super-utilisateurs. Utilisez le mot-clé UNLIMITED pour autoriser le nombre maximum de connexions simultanées. Une limite sur le nombre de connexions pour chaque utilisateur peut également s’appliquer. Pour plus d'informations, consultez CREATE USER. La valeur par défaut est UNLIMITED. Pour afficher les connexions en cours, interrogez la vue système STV_SESSIONS.

Note

Si les deux limites de connexion (utilisateurs et base de données) s’appliquent, un emplacement de connexion inutilisé situé entre les deux limites doit également être disponible lorsqu’un utilisateur tente de se connecter.

COLLATE { CASE_SENSITIVE | CASE_INSENSITIVE }

Clause qui spécifie si la recherche ou la comparaison de chaînes est CASE_SENSITIVE (sensible à la casse) ou CASE_INSENSITIVE (insensible à la casse). La valeur par défaut est CASE_SENSITIVE.

ISOLATION LEVEL { SERIALIZABLE | SNAPSHOT }

Clause qui spécifie le niveau d’isolation utilisé lorsque les requêtes sont exécutées sur une base de données.

  • Isolation SÉRIALISABLE — Fournit une sérialisabilité complète pour les transactions simultanées. Pour plus d’informations, consultez Isolement sérialisable.

  • Isolation SNAPSHOT : fournit un niveau d'isolation avec protection contre les conflits de mise à jour et de suppression. Il s'agit de la valeur par défaut pour une base de données créée dans un cluster provisionné ou un espace de noms sans serveur.

Vous pouvez afficher le modèle de simultanéité exécuté par votre base de données comme suit :

  • Interrogez la vue du catalogue STV_DB_ISOLATION_LEVEL. Pour plus d’informations, consultez STV_DB_ISOLATION_LEVEL.

    SELECT * FROM stv_db_isolation_level;
  • Interrogez la vue PG_DATABASE_INFO.

    SELECT datname, datconfig FROM pg_database_info;

    Le niveau d’isolation par base de données apparaît à côté de la clé concurrency_model. Une valeur 1 indique SNAPSHOT. Une valeur 2 indique SERIALIZABLE.

Dans les bases de données Amazon Redshift, l’isolation SERIALIZABLE et SNAPSHOT sont des types de niveau d’isolation sérialisable. Autrement dit, les lectures corrompues, les lectures non reproductibles (non-repeatable read) et les lectures fantôme sont empêchées conformément à la norme SQL. Ces niveaux d’isolation garantissent qu’une transaction s’exécute sur un instantané de données tel qu’il existe lorsque la transaction commence, et qu’aucune autre transaction ne peut modifier cet instantané. Toutefois, l’isolation SNAPSHOT n’offre pas une sérialisation complète, car elle n’empêche pas les insertions et mises à jour asymétriques en écriture sur différentes lignes de tableau.

Le scénario suivant illustre les mises à jour asymétriques en écriture utilisant le niveau d’isolation SNAPSHOT. Une table nommée Numbers contient une colonne nommée digits qui contient les valeurs 0 et 1. L’instruction UPDATE de chaque utilisateur ne chevauche pas l’autre utilisateur. Cependant, les valeurs 0 et 1 sont échangées. Le code SQL qu’elles exécutent suit cette chronologie avec les résultats suivants :

Heure Action utilisateur 1 Action utilisateur 2
1 BEGIN;
2 BEGIN;
3 SELECT * FROM Numbers;
digits
------
0
1
4 SELECT * FROM Numbers;
digits
------
0
1
5 UPDATE Numbers SET digits=0 WHERE digits=1;
6 SELECT * FROM Numbers;
digits
------
0
0
7 COMMIT;
8 Update Numbers SET digits=1 WHERE digits=0;
9 SELECT * FROM Numbers;
digits
------
1
1
10 COMMIT;
11 SELECT * FROM Numbers;
digits
------
1
0
12 SELECT * FROM Numbers;
digits
------
1
0

Si le même scénario est exécuté à l’aide d’une isolation sérialisable, Amazon Redshift met fin à l’utilisateur 2 en raison d’une violation sérialisable et renvoie une erreur 1023. Pour plus d’informations, consultez Comment corriger les erreurs d’isolement sérialisable. Dans ce cas, seul l’utilisateur 1 peut s’engager avec succès. Toutes les charges de travail ne nécessitent pas une isolation sérialisable, auquel cas l’isolation des instantanés suffit comme niveau d’isolation cible pour votre base de données.

DE L'ARN « <ARN>»

L'ARN AWS Glue de base de données à utiliser pour créer la base de données.

{SCHÉMA DE CATALOGUE DE DONNÉES <schema>« » | SANS SCHÉMA DE CATALOGUE DE DONNÉES}
Note

Ce paramètre ne s’applique que si votre commande CREATE DATABASE utilise également le paramètre FROM ARN.

Indique si la base de données doit être créée à l’aide d’un schéma pour pouvoir accéder à des objets dans le  AWS Glue Data Catalog.

DE L'INTÉGRATION « <integration_id>»

Spécifie s'il faut créer la base de données à l'aide d'un identifiant d'intégration zéro ETL. Vous pouvez le récupérer integration_id depuis la vue système SVV_INTEGRATION. Pour obtenir un exemple, consultez Créez des bases de données pour recevoir les résultats des intégrations sans ETL. Pour plus d'informations sur la création de bases de données avec des intégrations sans ETL, consultez la section Création de bases de données de destination dans Amazon Redshift dans le guide de gestion Amazon Redshift.

IAM_ROLE { default | ’SESSION’ | ’arn:aws:iam::<Compte AWS-id>:role/<role-name>’ }
Note

Ce paramètre ne s’applique que si votre commande CREATE DATABASE utilise également le paramètre FROM ARN.

Si vous spécifiez un rôle IAM qui est associé au cluster pendant l’exécution de la commande CREATE DATABASE, Amazon Redshift utilise les informations d’identification du rôle lorsque vous exécutez des requêtes sur la base de données.

Si le mot clé default est spécifié, le rôle IAM défini par défaut et qui est associé au cluster est alors utilisé.

Utilisez 'SESSION' si vous vous connectez à votre cluster Amazon Redshift à l’aide d’une identité fédérée et que vous accédez aux tables à partir du schéma externe créé à l’aide de cette commande. Pour voir un exemple d’utilisation d’une identité fédéré, consultez Utilisation d’une identité fédérée pour gérer l’accès d’Amazon Redshift aux ressources locales et aux tables externes Amazon Redshift Spectrum, qui explique comment configurer l’identité fédérée.

Utilisez l’Amazon Resource Name (ARN) d’un rôle IAM que votre cluster utilise pour l’authentification et l’autorisation. Au minimum, le rôle IAM doit être autorisé à exécuter une opération LIST sur le compartiment Amazon S3 devant être accessible et une opération GET sur les objets Amazon S3 contenus dans le compartiment. Pour en savoir plus sur l'utilisation de IAM_ROLE lors de la création d'une base de données à des AWS Glue Data Catalog fins de partage de données, consultez la section Utilisation de partages de données gérés par Lake Formation en tant que consommateur.

Le code suivant montre la syntaxe de la chaîne de paramètre IAM_ROLE pour un seul ARN.

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'

Vous pouvez créer des chaînes de rôles pour permettre à votre cluster d’endosser un autre rôle IAM, y compris un rôle appartenant à un autre compte. Les chaînes ainsi créées peuvent inclure jusqu’à 10 rôles. Pour plus d'informations, consultez Créer des rôles IAM dans Amazon Redshift Spectrum.

Attachez à ce rôle IAM une politique d’autorisations IAM similaire à la suivante.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessSecret", "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword", "secretsmanager:ListSecrets" ], "Resource": "*" } ] }

Pour connaître les étapes à suivre afin de créer un rôle IAM à utiliser avec une requête fédérée, consultez Création d’un secret et d’un rôle IAM pour utiliser des requêtes fédérées.

Note

N’incluez pas d’espaces dans la liste des rôles chaînés.

L’exemple suivant montre la syntaxe d’une chaîne de trois rôles.

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'

Syntaxe pour l’utilisation de CREATE DATABASE avec une unité de partage des données

La syntaxe suivante décrit la commande CREATE DATABASE utilisée pour créer des bases de données à partir d'un partage de données afin de partager des données au sein d'un même AWS compte.

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

La syntaxe suivante décrit la commande CREATE DATABASE utilisée pour créer des bases de données à partir d'un partage de données afin de partager des données entre comptes. AWS

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

Paramètres pour l’utilisation de CREATE DATABASE avec une unité de partage des données

FROM DATASHARE

Mot-clé indiquant où se situe l’unité de partage des données externe.

datashare_name

Nom de la base de données sur laquelle la base de données consommateur est créée.

WITH PERMISSIONS

Spécifie que la base de données créée à partir de l’unité de partage des données nécessite des autorisations de niveau objet pour accéder à des objets de base de données individuels. Sans cette clause, les utilisateurs ou les rôles disposant de l’autorisation USAGE sur la base de données auront automatiquement accès à tous les objets de celle-ci.

NAMESPACE namespace_guid

Valeur spécifiant l’espace de noms du producteur compte auquel l’unité de partage des données appartient.

ACCOUNT account_id

Valeur spécifiant le compte du producteur auquel l’unité de partage des données appartient.

Notes d’utilisation de la commande CREATE DATABASE pour le partage de données

En tant que superutilisateur de base de données, lorsque vous utilisez CREATE DATABASE pour créer des bases de données à partir de partages de données au sein du AWS compte, spécifiez l'option NAMESPACE. L’option ACCOUNT est facultative. Lorsque vous utilisez CREATE DATABASE pour créer des bases de données à partir de partages de données entre AWS comptes, spécifiez à la fois le COMPTE et le NAMESPACE fournis par le producteur.

Vous ne pouvez créer qu’une seule base de données grand public pour une unité de partage des données sur un cluster consommateur. Vous ne pouvez pas créer plusieurs bases de données grand public faisant référence à la même unité de partage des données.

CRÉER UNE BASE DE DONNÉES depuis AWS Glue Data Catalog

Pour créer une base de données à l'aide d'un ARN AWS Glue de base de données, spécifiez cet ARN dans votre commande CREATE DATABASE.

CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA;

Vous pouvez aussi éventuellement fournir une valeur dans le paramètre IAM_ROLE. Pour en savoir plus sur le paramètre et les valeurs acceptées, consultez Paramètres.

Les exemples suivants montrent comment créer une base de données à partir d’un ARN en utilisant un rôle IAM.

CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE <iam-role-arn>
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE default;

Vous pouvez également créer une base de données en utilisant un DATA CATALOG SCHEMA.

CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH DATA CATALOG SCHEMA <sample_schema> IAM_ROLE default;

Créez des bases de données pour recevoir les résultats des intégrations sans ETL

Pour créer une base de données à l'aide d'une identité d'intégration zéro ETL, spécifiez-la integration_id dans votre commande CREATE DATABASE.

CREATE DATABASE destination_db_name FROM INTEGRATION 'integration_id';

Par exemple, récupérez d'abord les identifiants d'intégration dans SVV_INTEGRATION ;

SELECT integration_id FROM SVV_INTEGRATION;

Utilisez ensuite l'un des identifiants d'intégration récupérés pour créer la base de données qui reçoit les intégrations zéro ETL.

CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111';

Limites de CREATE DATABASE

Amazon Redshift applique ces limites pour les bases de données :

  • Maximum de 60 bases de données définies par l’utilisateur par cluster.

  • Maximum de 127 octets pour un nom de base de données.

  • Un nom de base de données ne peut pas être un mot réservé.

Classement de base de données

Le classement est un ensemble de règles qui définit la façon dont le moteur de base de données compare et trie les données de type caractère dans SQL. Le classement insensible à la casse est le classement le plus utilisé. Amazon Redshift utilise un classement insensible à la casse pour faciliter la migration à partir d’autres systèmes d’entrepôts des données. Grâce à la prise en charge native du classement insensible à la casse, Amazon Redshift continue d’utiliser des méthodes de réglage ou d’optimisation importantes, telles que les clés de distribution, les clés de tri ou l’analyse à plage restreinte.

La clause COLLATE spécifie le classement par défaut de toutes les colonnes CHAR et VARCHAR de la base de données. Si CASE_INSENSITIVE est spécifié, toutes les colonnes CHAR ou VARCHAR utilisent un classement insensible à la casse. Pour obtenir des informations sur le classement, consultez Séquences de classement.

Les données insérées ou intégrées dans des colonnes insensibles à la casse conserveront leur casse d’origine. Cependant, toutes les opérations de chaîne basées sur la comparaison, y compris le tri et le regroupement, sont insensibles à la casse. Les opérations de correspondance de modèles telles que les prédicats LIKE, similaire à et les fonctions d’expression régulière sont également insensibles à la casse.

Les opérations SQL suivantes prennent en charge la sémantique de classement applicable :

  • Opérateurs de comparaison : =, <>, <, <=, >, >=.

  • Opérateur LIKE

  • Clauses ORDER BY

  • Clauses GROUP BY

  • Fonctions d’agrégation qui utilisent la comparaison de chaînes, telles que MIN, MAX et LISTAGG

  • Fonctions de fenêtrage, telles que les clauses PARTITION BY et ORDER BY

  • Fonctions scalaires greatest() et least (), STRPOS(), REGEXP_COUNT (), REGEXP_REPLACE(), REGEXP_INSTR(), REGEXP_SUBSTR()

  • Clause Distinct

  • UNION, INTERSECT et EXCEPT

  • IN LIST

Pour les requêtes externes, y compris les requêtes fédérées Amazon Redshift Spectrum et Aurora PostgreSQL, le classement de la colonne VARCHAR ou CHAR est le même que le classement actuel au niveau de la base de données.

L’exemple suivant interroge une table Amazon Redshift Spectrum :

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

Pour obtenir des informations sur la création de tables à l'aide du classement de bases de données, consultez CREATE TABLE.

Pour obtenir des informations sur la fonction COLLATE, consultez Fonction COLLATE.

Limites de classement de bases de données

Les limitations suivantes concernent l’utilisation du classement de base de données dans Amazon Redshift :

  • Toutes les tables ou vues système, y compris les tables catalogue PG et les tables système Amazon Redshift, sont sensibles à la casse.

  • Lorsque la base de données consommateur et la base de données producteur ont des classements différents au niveau de la base de données, Amazon Redshift ne prend pas en charge les requêtes inter-bases de données et inter-clusters.

  • Amazon Redshift ne prend pas en charge le classement insensible à la casse dans les requêtes au nœud principal uniquement.

    L’exemple suivant montre une requête insensible à la casse non prise en charge et l’erreur envoyée par qu’Amazon Redshift :

    SELECT collate(usename, 'case_insensitive') FROM pg_user; ERROR: Case insensitive collation is not supported in leader node only query.
  • Amazon Redshift ne prend pas en charge l’interaction entre les colonnes sensibles à la casse et non sensibles à la casse, telles que les opérations de comparaison, de fonction, de jointure ou d’ensembles.

    Les exemples suivants montrent des erreurs lorsque des colonnes sensibles à la casse et insensibles à la casse interagissent :

    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 ne prend pas en charge le classement pour le type de données SUPER. La création de colonnes SUPER dans des bases de données insensibles à la casse et les interactions entre les colonnes SUPER et insensibles à la casse ne sont pas prises en charge.

    L’exemple suivant crée une table avec le type de données SUPER dans la base de données insensible à la casse :

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

    L’exemple suivant interroge les données avec une chaîne insensible à la casse en les comparant avec les données 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.

Pour que ces requêtes fonctionnent, utilisez la fonction COLLATE afin de convertir le classement d’une colonne et la faire correspondre à l’autre. Pour plus d'informations, consultez Fonction COLLATE.

Exemples

Création d’une base de données

L’exemple suivant crée une base de données nommée TICKIT et attribue la propriété à l’utilisateur DWUSER.

create database tickit with owner dwuser;

Interrogez la table de catalogue PG_DATABASE_INFO afin d’afficher les détails relatifs aux bases de données.

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

L’exemple suivant crée une base de données nommée sampledb avec niveau d’isolation SNAPSHOT.

CREATE DATABASE sampledb ISOLATION LEVEL SNAPSHOT;

L’exemple suivant crée la base de données sales_db à partir de l’unité de partage des données salesshare.

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

Exemple de classement de bases de données

Création d’une base de données sensible à la casse

L’exemple suivant crée la base de données sampledb, crée la table T1 et insère des données dans la table T1.

create database sampledb collate case_insensitive;

Connectez-vous à la nouvelle base de données que vous venez de créer à l’aide de votre client SQL. Lorsque vous utilisez l’éditeur de requêtes Amazon Redshift, choisissez sampledb dans Éditeur. Lorsque vous utilisez RSQL, utilisez une commande similaire à celle-ci.

\connect sampledb;
CREATE TABLE T1 ( col1 Varchar(20) distkey sortkey );
INSERT INTO T1 VALUES ('bob'), ('john'), ('Mary'), ('JOHN'), ('Bob');

Ensuite, la requête trouve des résultats avec John.

SELECT * FROM T1 WHERE col1 = 'John'; col1 ------ john JOHN (2 row)
Classement par sensibilité à la casse

L’exemple suivant montre le classement par sensibilité à la casse avec la table T1. Le classement de Bob et bob ou John et john est non déterministe, car ils sont égaux dans la colonne insensible à la casse.

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

De même, l’exemple suivant montre un classement par sensibilité à la casse avec la clause GROUP BY. Bob et bob sont égaux et appartiennent au même groupe. Lequel des deux apparaît dans le résultat est non déterministe.

SELECT col1, count(*) FROM T1 GROUP BY 1; col1 | count -----+------ Mary | 1 bob | 2 JOHN | 2 (3 rows)
Interrogation avec une fonction de fenêtrage sur des colonnes insensibles à la casse

L’exemple suivant interroge une fonction de fenêtrage sur une colonne insensible à la casse.

SELECT col1, rank() over (ORDER BY col1) FROM T1; col1 | rank -----+------ bob | 1 Bob | 1 john | 3 JOHN | 3 Mary | 5 (5 rows)
Interrogation avec le mot-clé DISTINCT

L’exemple suivant interroge la table T1 avec le mot-clé DISTINCT.

SELECT DISTINCT col1 FROM T1; col1 ------ bob Mary john (3 rows)
Interrogation avec la clause UNION

L’exemple suivant illustre les résultats de la clause UNION des tables T1 et T2.

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