我对远程服务器上的数据库具有只读访问权限。所以,我可以执行:
COPY products TO '/tmp/products.csv' DELIMITER ',';
Run Code Online (Sandbox Code Playgroud)
但是在该服务器上我没有创建/保存文件的权限,所以我需要在我的本地机器上执行此操作。
当我连接到远程数据库时,如何执行命令将文件保存在本地计算机而不是远程服务器上?
或者,如何执行 Linux 命令以连接到远程数据库、执行查询并将输出作为文件保存到我的本地计算机?
我绝对是 MySQL (5.5.34) / Linux (Ubuntu 12.04 LTS) 的初学者
我用一张表创建了一个简单的数据库。尝试通过“data_test.csv 文件”将数据导入其中时,会出现错误消息 13。
从终端执行如下:
mysql> source /home/g/stockrecdb/load_test.sql;
Database changed
ERROR 13 (HY000): Can't get stat of '/home/stockrecdb/data_test.csv' (Errcode: 2)
mysql>
Run Code Online (Sandbox Code Playgroud)
注意:如果在 LOAD DATA LOCAL INFILE 中使用 LOCAL 会出现错误:ERROR 1148 (42000): The used command is not allowed with this MySQL version
我有一个包含很多模式的数据库,我想将每个表内容转储到 CSV。我知道 COPY 命令,但我不确定如何编写一些脚本来读取模式中的所有表并针对它们执行 COPY。
我正在寻找一种方法来仅根据指定 CSV 的内容生成新的 MySQL 表。我将使用的 CSV 文件具有以下属性;
在 Excel 中,这一切都相当简单,但是在 MySQL 中似乎并非如此(Google 运气不佳)。关于我应该看什么的任何建议?
使用 SQL Server 2008 R2,当我将结果另存为 CSV 时,没有标题。我可以通过使用 "Copy with Headers" 复制和粘贴来解决这个问题,或者只是获取标题并将它们粘贴到 CSV 等中,但是有没有更好的方法来做到这一点?
是否可以从 Sql Server Management Studio 查询制表符分隔的文件以查看其数据而不将其保存在任何地方?
我知道您可以使用以下内容BULK INSERT从制表符分隔的文件中:
BULK INSERT SomeTable
FROM 'MyFile.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n');
Run Code Online (Sandbox Code Playgroud)
但是,这需要您提前知道列并创建一个表来保存数据。
我也知道您可以查询其他一些文件类型,例如 CSV 或 Excel,而无需使用OPENROWSETExcel 驱动程序提前定义列,例如:
-- Query CSV
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Text;Database=\\Server\Folder\;HDR=Yes;',
'SELECT * FROM MyFile.csv')
-- Query Excel
SELECT *
FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0',
'Excel 8.0;Database=MyFile.xls',
'SELECT * FROM [Sheet1$]')
Run Code Online (Sandbox Code Playgroud)
另外,如果我更改注册表项Format下HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Text从CSVDelimited到TabDelimitedSQL Server上,上面的CSV查询将正确读取制表符分隔的文本文件,但是它将不再读取逗号分隔的文本文件,所以我不认为我想就这样离开它。
尝试使用Format=TabDelimited中OPENROWSET也不起作用
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Text;Database=\\Server\Folder\;HDR=Yes;Format=TabDelimited',
'SELECT * …Run Code Online (Sandbox Code Playgroud) 我正在尝试将csv包含表数据的文件导入 postgres 。表的列之一具有jsonb类型。
我的csv文件的一行包含类似
1,{"a":"b"}
Run Code Online (Sandbox Code Playgroud)
假设表有一个模式
id | smallint |
data | jsonb |
Run Code Online (Sandbox Code Playgroud)
如果我只是尝试插入数据,一切正常
INSERT INTO table VALUES (1, '{"a":"b"}');
Run Code Online (Sandbox Code Playgroud)
尝试直接从文件导入
COPY table FROM '/path/to/file.csv' DELIMITER ',' csv;
Run Code Online (Sandbox Code Playgroud)
给了我以下错误:
ERROR: invalid input syntax for type json
DETAIL: Token "a" is invalid.
CONTEXT: JSON data, line 1: {a...
COPY availability, line 1, column services: "{a: b}"
Run Code Online (Sandbox Code Playgroud)
我试图用', with ", with\"和\',但没有任何效果。
哪个是正确的语法呢?
我有一个包含以下列的表格:
id | name | city
Run Code Online (Sandbox Code Playgroud)
该表中有 1000 个条目。
我有一个行数有限的 CSV 文件,如下所示:
id,city
34,Denver
45,Kansas City
145,New York
Run Code Online (Sandbox Code Playgroud)
我可以LOAD DATA INFILE用来将我的 CSV 导入到我的表中,而不是插入新条目,而是根据id列更新行吗?
据我所知,硬盘每旋转一圈可以有一次磁盘搜索,因此我很想知道将一行写入 SQLite 表需要多少磁盘搜索,包括锁定等。假设没有索引在桌子上(甚至不是主键)。我假设有一个磁盘试图将一行写入文件?如您所知,我想将性能与将相同数据写入平面文件进行比较。
我继承了一个系统,其中对 MySQL 表的所有更新(甚至是单行/记录)都不是使用UPDATE table_name SET. 相反,它们是通过以下方式完成的:
LOAD DATA ... REPLACE INTO TABLE。这是我第一次看到这种更新表记录的方法,我想知道这样做的理由是什么。
顺便说一句,由于更新时需要锁定 CSV 文件,该方案会导致许多线程同步问题。
LOAD DATA ... REPLACE INTO TABLE我希望得到关于使用而不是 的好处的解释或见解UPDATE table_name SET。