我得到了这样的错误:
正在恢复数据库“MyDb”。等待恢复完成。
那时我做了一个危急的手术。
造成这种情况的原因是什么?以及如何避免?
让我们考虑以下示例(从 psql 脚本开始):
\c :db_to_run_on
TRUNCATE the_most_important_table;
-- tried to avoid similarities to anything that exists out there
Run Code Online (Sandbox Code Playgroud)
现在,如果它通过命令运行
psql [connection details] -v db_to_run_on=\'dev_database\'
Run Code Online (Sandbox Code Playgroud)
然后它就会运行并且用户很高兴。但是,如果(她)他决定指定-v db_to_run_on=production_database怎么办?(让我们假设这可能发生,就像人们rm -rf / # don't try this at home!!!偶尔运行一样。)希望该表有一个新的备份......
所以问题出现了:如何检查传递给脚本的变量并根据它们的值停止进一步处理?
从 SQLite FAQ 我知道:
多个进程可以同时打开同一个数据库。多个进程可以
SELECT同时进行。但是,任何时候只有一个进程可以对数据库进行更改。
所以,据我所知,我可以:1) 从多个线程 ( SELECT) 读取数据库 2) 从多个线程 ( SELECT)读取数据库并从单线程 ( CREATE, INSERT, DELETE)写入
但是,我读到了Write-Ahead Logging,它提供了更多的并发性,因为reader do not block writers and a writer do not block readings。读和写可以同时进行。
以下是出现 SQLITE_LOCKED 错误的其他原因:
- 试图
CREATE或DROP表或索引而SELECT声明仍悬而未决。- 当 a
SELECT在同一张表上处于活动状态时尝试写入表。- 尝试
SELECT在多线程应用程序中同时在同一张表上执行两个操作,如果 sqlite 未设置为这样做。- fcntl(3,F_SETLK 对 DB 文件的调用失败。例如,这可能是由 NFS 锁定问题引起的。此问题的一种解决方案是将 DB 移走,然后将其复制回来,使其具有新的 Inode 值
所以,我想为自己澄清一下,有必要避免锁吗?我可以从两个不同的线程同时读取和写入吗?谢谢。
我有一个表,我需要为该fk_fc_id字段选择所有具有空值的行(作为删除它们的前奏),
Column | Type | Modifiers
---------------+-----------------------------+------------------------------------------------------------
di_timestamp | timestamp without time zone |
di_item_value | character varying(10) |
fk_fc_id | integer |
di_id | integer | not null default nextval('data_item_di_id_seq1'::regclass)
Run Code Online (Sandbox Code Playgroud)
然而这行不通
# select fk_fc_id,di_timestamp,di_item_value from data_item where fk_fc_id="";
ERROR: zero-length delimited identifier at or near """"
LINE 1: ...di_timestamp,di_item_value from data_item where fk_fc_id="";
^
Run Code Online (Sandbox Code Playgroud)
尝试Null也没有用。
如果有人对如何对此进行排序有任何建议,我将不胜感激。
该文档包含有关如何删除 SQL Server 的说明。但是,这会留下某些包。如何删除所有痕迹并卸载 SQL Server 2017?
在开发多客户应用程序时,我们计划为每个客户使用不同的数据库。但它可能超过 1000 个客户(应用程序)。
PostgreSQL 会处理它没有任何问题吗?
有没有人尝试过类似的东西?
注:每个数据库35个表,平均最多3000条记录。
客户端连接到我们的 PostgreSQL 8.3 数据库但保持连接打开。是否可以将 PostgreSQL 配置为在一段时间不活动后关闭这些连接?
我有一个日志表,用于捕获某些文件何时导出到另一个系统的日期时间戳。
导出的日志表目前有三个字段:
id (primary key)
messageId (int)
exportedDateTime (datetime)
Run Code Online (Sandbox Code Playgroud)
回顾这一点,我发现该id字段没有任何用处,因为没有连接到该表。在这个表上唯一的工作是插入处理消息的批处理作业并插入到这个日志表中。
我应该删除该id字段吗?
我是否应该在任何一个主键messageId或exportedDateTime或两者兼而有之?
我们正在尝试删除一张表,但它被挂起,当我们看到“SHOW PROCESSLIST”命令时,它显示为“正在等待元数据锁定”。即使我们无法对该特定表执行任何操作。有人知道如何解决吗?
我正在处理复杂的问题,但我会将其简化为这个问题。
我有两张桌子
A [ID, column1, column2, column3]
B [ID, column1, column2, column3, column4]
Run Code Online (Sandbox Code Playgroud)
我想更新第三个:
C [ID, column1, column2,column3]
Run Code Online (Sandbox Code Playgroud)
我正在使用此查询更新另一个第三个表。
UPDATE C
set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab
from (select A.column1 as firstTab, B.column2 as secTab,
(A.column1 + B.column2) thirdTab
from A, B limit 1; ) as t ;
Run Code Online (Sandbox Code Playgroud)
我有:
UPDATE 0
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时:
select A.column1 as firstTab, B.column2 as secTab, (A.column1 + B.column2) thirdTab
from A, B limit 1;
Run Code Online (Sandbox Code Playgroud)
我得到了结果。我错过了什么吗?
示例数据:http : //sqlfiddle.com/#!15/e4d08/5
postgresql ×5
sql-server ×2
innodb ×1
installation ×1
join ×1
linux ×1
locking ×1
logs ×1
mysql ×1
mysql-5.5 ×1
primary-key ×1
psql ×1
recovery ×1
sqlite ×1
ubuntu ×1
update ×1