L'instruction CREATE TABLE crée des tables dans LindormTable ou LindormTSDB. Elle prend en charge des types de données tels que VARCHAR, TIMESTAMP et BIGINT, ainsi que des attributs de table comme TTL et COMPRESSION, afin de s'adapter à divers scénarios métier.
Moteur et version
L'instruction CREATE TABLE s'applique à LindormTable et LindormTSDB.
LindormTSDB prend en charge la syntaxe standard CREATE TABLE à partir de la version 3.4.32. Pour afficher ou mettre à niveau la version, consultez les Notes de version de LindormTSDB et la procédure de Mise à niveau d'une version mineure.
Syntaxe
create_table_statement ::= CREATE TABLE [ IF NOT EXISTS ] table_identifier
'('
column_definition
( ',' column_definition )*
',' PRIMARY KEY '(' primary_key ')'
( ',' {KEY|INDEX} [index_identifier]
[ USING index_method_definition ]
[ INCLUDE column_identifier ( ',' column_identifier )* ]
[ WITH index_options ]
)*
')'
[ PARTITION BY partition_definition ]
[ ZORDER BY zorder_column_list ]
[ WITH table_options ]
column_definition ::= column_identifier data_type [ NOT NULL ]
primary_key ::= column_identifier [ ',' column_identifier (ASC|DESC)]
index_method_definition ::= { KV | SEARCH }
index_options ::= '('
option_definition (',' option_definition )*
')'
partition_definition ::= HASH '(' column_identifier (',' column_identifier )* ')'
zorder_column_list ::= column_identifier ( ',' column_identifier )*
table_options ::= '(' option_definition (',' option_definition )* ')'
option_definition ::= option_identifier '=' string_literal
Différences de syntaxe
La syntaxe CREATE TABLE diffère entre LindormTable et LindormTSDB. Le tableau suivant compare les paramètres pris en charge par chaque moteur.
**Paramètre**
|
**LindormTable**
|
**LindormTSDB**
| | --- | --- | --- | |
[Nom de la table (table_identifier)](#172c903d5220c)
|
0
|
0
| |
[Définition de colonne (column_definition)](#f78c0c7a2c5h6)
|
0
|
0
| |
[Clé primaire (primary_key)](#b5e20271780xm)
|
0
|
0
| |
[Expression d'index (KEY\|INDEX)](#bb9b8e1047cvt)
|
0
|
✖️
| |
[Partition (partition_definition)](#1f67a529f46i4)
|
✖️
|
0
| |
[Attributs de table (table_options)](#b5e20273788rv)
|
0
|
✖️
|
Utilisation
Nom de la table (table_identifier)
Le nom de la table doit respecter les exigences suivantes :
Le nom peut contenir des chiffres, des lettres majuscules et minuscules, des points (.), des traits d'union (-) et des underscores (_).
Le nom ne peut pas commencer par un point (.) ou un trait d'union (-).
La longueur du nom doit être comprise entre 1 et 255 caractères.
Définition de colonne (column_definition)
|
Syntaxe |
Obligatoire |
Description |
|
nom de colonne (column_identifier) |
Oui |
|
|
type de données (data_type) |
Oui |
Pour plus d'informations sur les types de données pris en charge, consultez les Types de données. Important
Lors de la création d'une table de séries temporelles, tenez compte des points suivants si vous utilisez le type de données TIMESTAMP :
|
|
Contrainte NULL |
Non |
Indique si la colonne autorise les valeurs NULL. Important
Lindorm SQL ne valide pas cette contrainte. Le moteur de stockage effectue la validation. La validation de la contrainte NULL dépend des règles du moteur de stockage, qui varient. Par conséquent, il se peut que vous puissiez écrire des valeurs NULL dans une colonne même si elle est définie avec NOT NULL. Pour garantir que les données sont écrites comme prévu, respectez les exigences suivantes :
|
Clé primaire (primary_key)
Une clé primaire identifie de manière unique les données d'une table et se compose d'une ou plusieurs colonnes. Vous devez spécifier une clé primaire (PRIMARY KEY) lors de la création d'une table.
La clé primaire ne peut pas être modifiée après sa création. Concevez votre clé primaire avec soin.
Lorsque vous utilisez l'instruction CREATE TABLE pour créer une table, tenez compte des éléments suivants :
|
Type de moteur |
Description |
|
LindormTable |
|
|
LindormTSDB |
|
Expression d'index (KEY|INDEX)
Utilisez le mot-clé KEY ou INDEX dans une instruction CREATE TABLE pour créer un index en même temps que la table.
L'expression d'index (KEY|INDEX) est prise en charge uniquement dans LindormTable 2.7.7 et versions ultérieures, ainsi que dans Lindorm SQL 2.8.6.0 et versions ultérieures.
Pour vérifier les versions de LindormTable et Lindorm SQL, consultez les Notes de version de LindormTable et les Notes de version SQL. Si vous ne pouvez pas effectuer la mise à niveau vers les versions requises depuis la console, contactez le support technique Lindorm. L'ID DingTalk est s0s3eg3.
Utilisation
Si vous ne spécifiez pas explicitement un nom d'index, le système en génère un par défaut. Le format du nom d'index généré est
TableName_idx_${auto-incremented ID}.À l'aide d'une expression d'index, vous pouvez actuellement créer uniquement des index secondaires et index de recherche.
-
Inclusion de colonnes par défaut pour les index secondaires :
Lindorm SQL 2.9.3.10 et versions ultérieures
Si vous ne spécifiez pas de clause
INCLUDElors de la création d'un index secondaire, toutes les autres colonnes ne sont pas incluses dans l'index par défaut.Lindorm SQL versions antérieures à 2.9.3.10
Si vous ne spécifiez pas de clause
INCLUDElors de la création d'un index secondaire, toutes les autres colonnes sont incluses dans l'index par défaut.RemarqueCela équivaut à définir l'attribut d'index INDEX_COVERED_TYPE sur
COVERED_ALL_COLUMNS_IN_SCHEMA. Si la table est une table dynamique, cela équivaut à définir l'attribut surCOVERED_DYNAMIC_COLUMNS. Si vous spécifiez une clause
KEYouINDEXlors de la création d'une table mais ne spécifiez pas explicitement les attributs MUTABILITY et CONSISTENCY, la table est créée avec les attributs par défaut suivants :CONSISTENCY = 'strong'etMUTABILITY='MUTABLE_LATEST'.Si l'instruction CREATE TABLE inclut une expression d'index, le système crée d'abord la table, puis l'index. Si une exception se produit lors de la création de l'index, la table et l'index peuvent subsister et ne sont pas automatiquement supprimés. Vous pouvez utiliser des instructions telles que
SHOWetDESCRIBEpour les afficher, mais il se peut que vous ne puissiez ni écrire des données ni interroger la table et l'index. Nous vous recommandons de supprimer la table et l'index restants, puis de les recréer.
Partition (partition_definition)
Les partitions sont prises en charge uniquement par LindormTSDB. Dans une table de séries temporelles, la colonne utilisée dans la clause PARTITION BY doit être une colonne de clé primaire VARCHAR.
Utilisez PARTITION BY HASH(column1, column2, ..., columnN) pour spécifier une ou plusieurs colonnes pour le hachage de partition. Par exemple : PARTITION BY HASH(c1, p1).
Attributs de table (table_options)
Seul LindormTable prend en charge les attributs de table. Vous pouvez utiliser le mot-clé WITH pour ajouter les attributs de table suivants :
|
Option |
Type |
Description |
|
COMPRESSION |
STRING |
Algorithme de compression pour la table. Valeurs valides :
Remarque
Dans les versions de LindormTable antérieures à 2.3.4, aucun algorithme de compression n'est spécifié par défaut. Dans LindormTable 2.3.4 et versions ultérieures, l'algorithme ZSTD est utilisé par défaut. |
|
TTL |
INT |
Durée de vie (TTL) des données, en secondes (s). Remarque
|
|
COMPACTION_MAJOR_PERIOD |
LONG |
Intervalle auquel le système effectue une Remarque
Valeur par défaut : Math.Min(TTL, 1 728 000 000 ms). Si vous ne définissez pas de TTL, la valeur par défaut est de 20 jours (20 × 24 × 60 × 60 × 1 000 = 1 728 000 000 ms). |
|
MUTABILITY |
STRING |
Mode d'écriture pour la table de base. Cet attribut affecte le comportement d'indexation. Valeur par défaut : Valeurs valides :
Pour plus d'informations sur les valeurs, consultez les Index secondaires natifs haute performance. Important
Une fois qu'un index est créé, vous ne pouvez pas modifier l'attribut MUTABILITY. Pour changer cet attribut, vous devez d'abord supprimer tous les index de la table. Sauvegardez vos données avant d'effectuer cette opération pour éviter toute perte de données. |
|
CONSISTENCY |
STRING |
Niveau de cohérence de la table. Pour les instances inter-zones, spécifie la cohérence des données entre les réplicas principaux et secondaires. Valeurs valides :
Important
Pour les instances inter-zones, si votre charge de travail implique des opérations de lecture-modification-écriture telles que l'incrémentation, l'ajout ou les mises à jour d'index, vous devez définir l'attribut CONSISTENCY de la table principale sur |
|
NUMREGIONS |
INT |
Nombre de régions pré-découpées pour la table. |
|
CHS |
INT |
Limite séparant les données chaudes et froides, en secondes. Remarque
|
|
STARTKEY et ENDKEY |
Même type de données que la première colonne de la clé primaire. |
Clé de début et clé de fin pour le pré-découpage des régions de la table. Remarque
|
|
SPLITKEYS |
Même type de données que la première colonne de la clé primaire. |
Clés de début pour toutes les régions pré-découpées de la table. Remarque
|
|
SPLITALGO |
STRING |
Définit l'algorithme de découpage pour le pré-partitionnement. Les algorithmes pris en charge sont :
|
|
DYNAMIC_COLUMNS |
STRING |
Indique s'il faut activer les colonnes dynamiques. Valeurs valides :
Remarque
Les colonnes dynamiques prennent en charge uniquement le type de données Varbinary. Pour plus d'informations sur les colonnes dynamiques, consultez la section Colonnes dynamiques. |
|
VERSIONS |
STRING |
Nombre de versions à conserver pour chaque valeur de colonne. Doit être un entier supérieur ou égal à 1. Valeur par défaut : 1. Pour plus d'informations sur le versioning des données, consultez la section Versioning des données. Important
Une valeur élevée pour l'attribut VERSIONS peut dégrader les performances des requêtes et du stockage. Nous vous recommandons de définir cette valeur sur 1. |
|
BLOB_BUCKET_NAME |
STRING |
Nom du bucket pour les colonnes BLOB dans la table. Le nom du bucket doit respecter les règles suivantes :
Remarque
|
Les versions de LindormTable antérieures à 2.2.16 ne prennent pas en charge le mot-clé WITH pour définir les attributs de table. Placez le mot-clé d'attribut entre guillemets simples ('). Les valeurs d'attribut sont définies en fonction de leur type de données ; par exemple, les valeurs STRING doivent être placées entre guillemets simples ('). Par exemple : CREATE TABLE IF NOT EXISTS t1(c1 varchar, c2 bigint, c3 int, c4 int, PRIMARY KEY(c1,c2)) 'CONSISTENCY'='strong';.
Exemples
Créer une table
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
);
Vérification
Exécutez l'instruction DESCRIBE table sensor; pour vérifier que la table a été créée.
Créer une table avec un index
Créez un index secondaire en même temps que la table.
CREATE TABLE IF NOT EXISTS sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time),
KEY (temperature, time)
);
Vérification
Exécutez DESCRIBE table sensor; pour vérifier que la table a été créée, et exécutez SHOW INDEX FROM sensor; pour vérifier que l'index secondaire a été créé.
Spécifier la durée de vie (TTL) et l'algorithme de compression
Créez une table large avec une durée de vie (TTL) de 30 jours (2 592 000 secondes) et une compression ZSTD.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (COMPRESSION='ZSTD', TTL='2592000');
Vérification
Exécutez l'instruction
DESCRIBE table sensor;pour vérifier que la table a été créée.Accédez à la page Overview dans le système de gestion de cluster et cliquez sur le nom de la table cible. Dans la zone current table details, cliquez sur view table properties pour vérifier les paramètres COMPRESSION et TTL.
Spécifier l'intervalle de major compaction
Créez une table large avec un intervalle de major compaction de 10 jours (864 000 000 millisecondes).
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (COMPACTION_MAJOR_PERIOD='864000000');
Vérification
Exécutez l'instruction
DESCRIBE table sensor;pour vérifier que la table a été créée.Accédez à la page Overview dans le système de gestion de cluster et cliquez sur le nom de la table cible. Dans la zone current table details, cliquez sur view table properties pour vérifier la valeur du paramètre COMPACTION_MAJOR_PERIOD.
Activer les colonnes dynamiques
Pour écrire des données dans des colonnes dynamiques, définissez DYNAMIC_COLUMNS sur TRUE.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (DYNAMIC_COLUMNS='TRUE');
Vérification
Exécutez l'instruction
DESCRIBE table sensor;pour vérifier que la table a été créée.Accédez à la page Overview dans le système de gestion de cluster et cliquez sur le nom de la table cible. Dans la zone current table details, cliquez sur view table properties pour vérifier la valeur du paramètre DYNAMIC_COLUMNS.
Spécifier la limite entre données chaudes et froides
Créez une table large avec une limite de données chaudes/froides pour l'archivage des données.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (CHS = '86400', CHS_L2 = 'storagetype=COLD');
Vérification
Exécutez l'instruction
DESCRIBE table sensor;pour vérifier que la table a été créée.Accédez à la page Overview dans le système de gestion de cluster et cliquez sur le nom de la table cible. Dans la zone current table details, cliquez sur view table properties pour vérifier les paramètres CHS et CHS_L2.
Définir plusieurs attributs à la fois
Créez une table large avec compression, durée de vie (TTL) et une limite de données chaudes/froides.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (
COMPRESSION='ZSTD',
CHS = '86400',
CHS_L2 = 'storagetype=COLD',
TTL = '2592000');
Vérification
Exécutez l'instruction
DESCRIBE table sensor;pour vérifier que la table a été créée.Accédez à la page Overview dans le système de gestion de cluster et cliquez sur le nom de la table cible. Dans la zone current table details, cliquez sur view table properties pour vérifier les paramètres COMPRESSION, CHS, CHS_L2 et TTL.
Configurer les partitions
Créez une table large pré-découpée en cinq partitions, avec une clé de début 1000 et une clé de fin 9000.
CREATE TABLE sensor (
p1 INTEGER NOT NULL,
c1 INTEGER,
c2 VARCHAR,
c3 VARCHAR,
PRIMARY KEY(p1)
) WITH (NUMREGIONS='5', STARTKEY='1000', ENDKEY='9000');
Vérification
Exécutez l'instruction
DESCRIBE table sensor;pour vérifier que la table a été créée.Accédez à la page Overview dans le système de gestion de cluster et cliquez sur le nom de la table cible. Dans la zone Shard information, vérifiez les paramètres startKey et endKey pour chaque partition.
Définir les clés de début pour plusieurs partitions
Exemples de code
-
Spécifier les partitions par des clés numériques (en fonction de la distribution de vos données)
Créez une table large avec des clés de début prédéfinies pour cinq partitions, ce qui donne six partitions pré-découpées.
CREATE TABLE sensor ( p1 INT NOT NULL, p2 INT NOT NULL, c1 VARCHAR, c2 BIGINT, PRIMARY KEY(p1, p2) ) WITH (SPLITKEYS = '100000,300000,500000,700000,900000'); -
Spécifier les partitions par des clés de chaîne (en fonction de la distribution de vos données)
CREATE TABLE your_table ( address VARCHAR NOT NULL, col1 VARCHAR, PRIMARY KEY (address) ) WITH ( SPLITKEYS = '0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff' ); -
Spécifier un algorithme de découpage
CREATE TABLE your_table2 ( address VARCHAR NOT NULL, col1 VARCHAR, PRIMARY KEY (address) ) WITH ( NUMREGIONS = 256, SPLITALGO = 'HexStringSplit' );
Vérification
Exécutez l'instruction
DESCRIBE table sensor;pour vérifier que la table a été créée.Accédez à la page Overview dans le système de gestion de cluster et cliquez sur le nom de la table cible. Dans la zone Shard information, vérifiez les paramètres startKey et endKey pour chaque partition.
Spécifier explicitement une colonne de clé de partition
Étant donné que la plupart des requêtes récupèrent des données instantanées pour un seul appareil, spécifiez device_id comme colonne de clé de partition.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) PARTITION BY HASH(device_id);
Vérification
Exécutez l'instruction DESCRIBE TABLE sensor; pour vérifier que la table a été créée.
Créer une table géospatiale
-
Créez une table prenant en charge le type de données spatiales générique Geometry, ce qui vous permet d'écrire n'importe quel type de données spatiales.
CREATE TABLE geoms(gid INT, g GEOMETRY, PRIMARY KEY(gid));Écrivez des données de n'importe quel type de données spatiales.
UPSERT INTO geoms(gid, g) VALUES(0,ST_GeomFromText('POINT(-10.1 3.3)')),(1,ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)')),(2,ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))')); -
Créez une table pour le type de données Point. Seules les données de type point peuvent être écrites dans cette table.
CREATE TABLE pts(gid INT, g GEOMETRY(POINT), PRIMARY KEY(gid));Écrivez des données de type point.
UPSERT INTO pts(gid, g) VALUES(0, ST_MakePoint(0,0)),(1, ST_MakePoint(1,1)); -
Créez une table pour le type de données Polygon. Seules les données de type polygone peuvent être écrites dans cette table.
CREATE TABLE polys(gid INT, g GEOMETRY(POLYGON), PRIMARY KEY(gid));Écrivez des données de type polygone.
UPSERT INTO polys(gid,g) VALUES(0,ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))')); -
Créez une table pour le type de données LineString. Seules les données de type ligne peuvent être écrites dans cette table.
CREATE TABLE lines(gid INT, g GEOMETRY(LINESTRING), PRIMARY KEY(gid));Écrivez des données de type ligne.
UPSERT INTO lines(gid,g) VALUES(0, ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)')); -
Créez une table pour le type de données MULTIPOINT. Seules les données multipoints peuvent être écrites dans cette table.
CREATE TABLE multipoints(gid INT, g GEOMETRY(MULTIPOINT), PRIMARY KEY(gid));Écrivez des données multipoints.
UPSERT INTO multipoints(gid,g) VALUES(0, ST_GeomFromText('MULTIPOINT (10 40, 40 30, 20 20, 30 10)')); -
Créez une table pour le type de données MULTILINESTRING. Seules les données multilignes peuvent être écrites dans cette table.
CREATE TABLE multilines(gid INT, g GEOMETRY(MULTILINESTRING), PRIMARY KEY(gid));Écrivez des données multilignes.
UPSERT INTO multilines(gid,g) VALUES(0, ST_GeomFromText('MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))')); -
Créez une table pour le type de données MULTIPOLYGON. Seules les données multipolygones peuvent être écrites dans cette table.
CREATE TABLE multipolys(gid INT, g GEOMETRY(MULTIPOLYGON), PRIMARY KEY(gid));Écrivez des données multipolygones.
UPSERT INTO multipolys(gid,g) VALUES(0, ST_GeomFromText('MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))')); -
Créez une table pour le type de données GEOMETRYCOLLECTION. Seules les données de collection géométrique peuvent être écrites dans cette table.
CREATE TABLE collections(gid INT, g GEOMETRY(GEOMETRYCOLLECTION), PRIMARY KEY(gid));Écrivez des données de collection géométrique.
UPSERT INTO collections(gid,g) VALUES(0, ST_GeomFromText('GEOMETRYCOLLECTION (POINT (40 10), LINESTRING (10 10, 20 20, 10 40), POLYGON ((40 40, 20 45, 45 30, 40 40)))')); -
Créez une table avec plusieurs colonnes de type Geometry.
CREATE TABLE mix(gid INT, pt GEOMETRY(POINT), ply GEOMETRY(POLYGON), PRIMARY KEY(gid));