Estou tendo problemas para usar a LOAD DATA LOCAL INFILE
instrução no Datagrip. Suponha que eu tenha source_data.csv
como:
rating,statement
-2,"I'm hungry!"
5,"I'm satisfied."
1,"Ok, but could be better."
Depois de executar o seguinte bloco de código no DataGrip:
# loading_sample_table.sql
USE sample_db;
DROP TABLE IF EXISTS sample_table;
CREATE TABLE sample_table (rating int, statement varchar(50), id serial);
LOAD DATA
LOCAL INFILE 'absolute/path/to/my/source_data.csv'
INTO TABLE sample_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\''
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(rating, statement);
Eu recebo o seguinte erro:
[42000][1148] The used command is not allowed with this MySQL version
A execução SHOW VARIABLES LIKE "%version%";
no shell do MySQL ou no DataGrip produz
+--------------------------+-------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------+
| immediate_server_version | 999999 |
| innodb_version | 8.0.18 |
| original_server_version | 999999 |
| protocol_version | 10 |
| slave_type_conversions | |
| tls_version | TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 |
| version | 8.0.18 |
| version_comment | MySQL Community Server - GPL |
| version_compile_machine | x86_64 |
| version_compile_os | macos10.14 |
| version_compile_zlib | 1.2.11 |
+--------------------------+-------------------------------+
Então, se eu tentar o mesmo comando acima, mas apenas cair LOCAL
do bloco de código, recebo o seguinte erro:
[HY000][13] Can't get stat of 'absolute/path/to/my/source_data.csv' (OS errno 13 - Permission denied)
Além disso, verifiquei SHOW GLOBAL VARIABLES LIKE 'local_infile';
e posso ver:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
No entanto, se no meu terminal eu executar:
mysql --local-infile=1 -uroot -p < 'absolute/path/to/my/loading_sample_table.sql'
Depois de inserir minha senha de root, o arquivo é executado com sucesso . Idealmente, eu gostaria de fazer tudo no DataGrip. Não tenho certeza sobre como depurar esse problema.
Consegui adicionar o seguinte parâmetro à string de conexão do lado do servidor e funcionou sem precisar fazer o downgrade da versão do driver:
jdbc:mysql://localhost:3306/?allowLoadLocalInfile=true
Parece que o problema do driver MySQL JDBC.
Mude para o driver MySQL JDBC
5.1.47
fornecido pelo DataGrip para resolver o problema.Para alterar a versão do driver JDBC:
Go to driver
5.1.47
Carregar o resultado do arquivo local de dados: