Impossible d'insérer dans la base de données ClickHouse en raison d'autorisations insuffisantes: / var / lib / clickhouse / data /
J'ai créé une instance d'un ClickHouse DB dans un conteneur via docker-compose:
version: '3'
services:
ch:
image: yandex/clickhouse-server
restart: on-failure
volumes:
- '/mnt/c/DevTools/source/storm/clickhouse_setup/data/ch:/var/lib/clickhouse/'
- './ch_configs:/etc/clickhouse-server/'
ports:
- 9000:9000
- 8123:8123
ulimits:
nofile: 262144
client:
image: yandex/clickhouse-client
volumes:
- './client-config.xml:/etc/clickhouse-client/config.xml'
Je peux y accéder et trouver la base de données que j'ai créée, mais quand je cours
INSERT INTO simple_people (id, first_name, last_name) VALUES(1,'david','lo')
J'obtiens cette réponse:
Query id: 46ef1af8-5728-425e-87f5-511f7e0e79d1
Received exception from server (version 20.12.3):
Code: 1000. DB::Exception: Received from ch:9000. DB::Exception: Access to file denied: insufficient permissions: /var/lib/clickhouse/data/registry/simple_people/tmp_insert_1_2_2_0.
1 rows in set. Elapsed: 0.068 sec.
Comment obtenir la permission d'INSERER DANS?
Remarques:
Je n'ai aucun problème à courir:
SELECT * FROM simple_people
Je suis sur WSL: Ubuntu-20.04
Réponses
C'est à cause du docker WSL +.
Essayez le chemin complet au lieu de ./data
J'ai installé clickhouse directement sur WSL Ubuntu 18.04 sur le serveur Windows 2019 sans docker et j'ai rencontré le même problème. Dans mon cas, j'essayais d'insérer des données dans une table avec la configuration de la politique de stockage ClickHouse afin que toutes les données soient stockées dans / mnt / f / clickhouse (F: \ clickhouse sur Windows). L'erreur que j'ai eue était:
DB::Exception: Access to file denied: insufficient permissions: /mnt/f/clickhouse/store/1e6/1e69cad8-25a1-4ec5-ab5b-fb32d73b7c8c/tmp_insert_all_2_2_0
Le correctif du problème consistait à activer la fonctionnalité de métadonnées sur WSL qui synchronise les autorisations entre Linux et Windows en remontant le lecteur F: avec la fonctionnalité activée. Et puis recréez le dossier clickhouse s'il existe déjà.
sudo umount /mnt/f
sudo mount -t drvfs F: /mnt/f -o metadata
Informations supplémentaires
Si vous avez des questions sur la façon de configurer une politique de stockage sur Clickhouse pour choisir l'emplacement de vos données. Voici le contenu de mon /etc/clickhouse-server/config.d/storage.xml
<yandex>
<storage_configuration>
<disks>
<!--
default disk is special, it always
exists even if not explicitly
configured here, but you can't change
it's path here (you should use <path>
on top level config instead)
-->
<default>
<!--
You can reserve some amount of free space
on any disk (including default) by adding
keep_free_space_bytes tag
-->
<keep_free_space_bytes>1024</keep_free_space_bytes>
</default>
<mnt_f>
<!--
disk path must end with a slash,
folder should be writable for clickhouse user
-->
<path>/mnt/f/clickhouse/</path>
</mnt_f>
</disks>
<policies>
<mnt_f_only> <!-- name for new storage policy -->
<volumes>
<mnt_f_volume> <!-- name of volume -->
<!--
we have only one disk in that volume
and we reference here the name of disk
as configured above in <disks> section
-->
<disk>mnt_f</disk>
</mnt_f_volume>
</volumes>
</mnt_f_only>
</policies>
</storage_configuration>
</yandex>
Choisissez la politique de stockage lors de la création de la table:
CREATE TABLE test(
EventId String,
EventName Nullable(String),
) ENGINE = MergeTree()
ORDER BY EventId
SETTINGS storage_policy = 'mnt_f_only';