sqlite3的回声和“<”管道命令无法正常运行
我正在读SQL book和笔者使用SQLITE3,这是真棒,因为没有一个服务器与混乱。无论如何,作者在书中说,要输入sqlite3 -echo something.db < some.sql
这个问题对于终端来说什么都没有回应,甚至没有从'<'重定向命令创建的数据库。sqlite3的回声和“<”管道命令无法正常运行
有谁知道是怎么回事......这件事?
你的朋友,
user2085446
其实,你显示命令是建立从SQL转储一个新的数据库的正确方法。
能否请您出示的sql文件的内容(cat some.sql
)?我可以重现所描述的行为的唯一方法是通过给sqlite提供一个空的sql文件。
试试这个命令,看看你是否能得到同样的结果:
$ cat <<EOF > test.sql
> create table test1 (f1, f2, f3);
> insert into test1(f1, f2, f3) values ("foo", "bar", "baz");
> EOF
$ sqlite3 -echo test.db < test.sql
create table test1 (f1, f2, f3);
insert into test1(f1, f2, f3) values ("foo", "bar", "baz");
$ file test.db
test.db: SQLite 3.x database
something.db
是现有的数据库。 < some.sql
表示它从该文件中选择数据并将其写入sqlite控制台。所以这两个文件都必须存在。
something.db
必须是一个有效的sqlite3升数据库文件(或空或不存在的文件); some.sql
必须是包含您的命令的文本文件。
的-echo
PARAMS指定它必须执行之前打印的命令。
这让我想起很多事情。感谢您的答复。有没有办法创建一个空的数据库.db文件,然后将现有的.sql文件加载到它?因为如果我创建一个新的数据库,我必须指定一个新的表和东西,或者当我退出sqlite3时它就会消失... – 2013-02-20 05:49:19
@user如果database.db存在,那么some.sql中的查询将只编辑它。 – n1xx1 2013-02-20 05:50:52
我需要为database.db创建表来加载一个.sql文件到它吗? – 2013-02-20 06:06:20
根据您的意见和你的终端屏幕截图,我得到的印象是你的“some.sql”文件可能在错误的编码和/或开始与BOM混淆sqlite。
可以使用file
命令查找出来,如果这是问题的使用iconv
,recode
或你喜欢的文本编辑器将文件转换成你的终端预计,编码,和正确的行结束符(\n
又名“LF “在Linux中,\r\n
又名Windows中的”CRLF“)。
嗨。我可以将SQL转储为.txt或其他东西,否则它看起来像疯狂的字节码。让我在这一分钟上工作。我现在也要试试你的bash-foo! :D – 2013-02-20 06:08:17
我能够获得相同的结果!太棒了。 – 2013-02-20 06:11:04
请找到我的SQL转储:'PRAGMA foreign_keys = OFF; BEGIN TRANSACTION; CREATE TABLE person(id整数主键,名字文本,姓氏文本,年龄整数); INSERT INTO“person”VALUES(0,'beta','bill',59); CREATE TABLE宠物(ID整数主键,名称文本,品种文本,年龄整数,死亡整数); INSERT INTO“pet”VALUES(0,'t.rex','dinosaur',23,0); CREATE TABLE person_pet(person_id integer,pet_id integer); INSERT INTO“person_pet”VALUES(0,0); COMMIT;' – 2013-02-20 06:22:32