我经常需要在重建之前删除PostgreSQL数据库中的所有数据.我将如何直接在SQL中执行此操作?
目前我已经设法提出一个SQL语句,它返回我需要执行的所有命令:
SELECT 'TRUNCATE TABLE ' || tablename || ';' FROM pg_tables WHERE tableowner='MYUSER';
Run Code Online (Sandbox Code Playgroud)
但是,一旦拥有它们,我就无法以编程方式执行它们.
是否有可以截断或舍入Double的函数?在我的代码中的某一点,我想要一个像:1.23456789舍入到的数字1.23
我有一个UILabel依赖于我的应用程序是否被纵向或横向模式下运行在iPhone或iPad,可以长短不一.当文本太长而无法在一行显示并且它被截断时,我希望用户能够按下它并获得全文的弹出窗口.
如何查看是否UILabel截断文本?它甚至可能吗?现在我只是根据我所处的模式检查不同长度,但它不能很好地工作.
我正在尝试编写一个Unix脚本,它将截断/清空一个文件,该文件在达到3GB空间时会被应用程序连续写入/打开.我知道下面的命令会这样做:
cp /dev/null [filename]
Run Code Online (Sandbox Code Playgroud)
但是我将在生产环境中自动将其作为一个cron作业运行 - 只需在此处发布,看看你们在做类似的事情时是否遇到任何问题.
例如,我有变量3.545555555,我想截断到3.54.
根据这个论坛的讨论,SQL Server(我使用2005但我收集这个也适用于2000和2008)默认将varchar你指定的任何s指定为varchar的长度,即使直接插入该字符串也是如此.INSERT实际上会导致错误.例如.如果我创建此表:
CREATE TABLE testTable(
[testStringField] [nvarchar](5) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
然后当我执行以下内容时:
INSERT INTO testTable(testStringField) VALUES(N'string which is too long')
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
String or binary data would be truncated.
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)
大.保留了数据完整性,并且调用者知道它.现在让我们定义一个存储过程来插入:
CREATE PROCEDURE spTestTableInsert
@testStringField [nvarchar](5)
AS
INSERT INTO testTable(testStringField) VALUES(@testStringField)
GO
Run Code Online (Sandbox Code Playgroud)
并执行它:
EXEC spTestTableInsert @testStringField = N'string which is too long'
Run Code Online (Sandbox Code Playgroud)
没有错误,1排受影响.将一行插入表中,testStringField格式为'strin'.SQL Server以静默方式截断存储过程的varchar参数.
现在,这种行为有时可能很方便,但我认为没有办法把它关掉.这非常烦人,因为如果我将一个字符串传递给存储过程,我希望错误.似乎有两种方法可以解决这个问题.
首先,将存储过程的@testStringField参数声明为大小为6,并检查其长度是否超过5.这看起来像是一个黑客攻击并涉及大量的样板代码.
其次,只需声明所有存储过程varchar参数varchar(max),然后让INSERT存储过程中的语句失败.
后者似乎工作正常,所以我的问题是:varchar(max)在SQL …
我试图在C#中截断一些长文本,但我不希望我的字符串在一个单词中被切断.有没有人有一个我可以用来截断单词结尾的字符串的函数?
例如:
"This was a long string..."
Run Code Online (Sandbox Code Playgroud)
不:
"This was a long st..."
Run Code Online (Sandbox Code Playgroud) 我们正在使用Postgresql 9.1.4我们的数据库服务器.我一直在努力加快我的测试套件的速度,所以我盯着db稍微分析一下,看看到底发生了什么.我们使用database_cleaner在测试结束时截断表.是的我知道交易更快,我不能在某些情况下使用它们所以我不关心它.
我关心的是,为什么TRUNCATION需要这么长时间(比使用DELETE更长)以及为什么它在我的CI服务器上需要更长时间.
现在,在本地(在Macbook Air上)一个完整的测试套件需要28分钟.拖尾日志,每次我们截断表...即:
TRUNCATE TABLE table1, table2 -- ... etc
Run Code Online (Sandbox Code Playgroud)
执行截断需要1秒多的时间.在我们的CI服务器(Ubuntu 10.04 LTS)上记录日志,需要花费整整8秒才能截断表格,构建需要84分钟.
当我切换到:deletion策略时,我的本地构建花了20分钟,CI服务器下降到44分钟.这是一个显着的差异,我真的很惊讶为什么会这样.我已经调整 了 CI服务器上的数据库,它有16GB系统RAM,4gb shared_buffers ......和一个SSD.所有好东西.这怎么可能:
一个.它比我的Macbook Air慢了2gb
.当postgresql文档 明确指出它应该快得多时,TRUNCATION比DELETE慢得多.
有什么想法吗?
有人可以让我快速概述使用以下两个陈述的利弊:
TRUNCATE TABLE dbo.MyTable
Run Code Online (Sandbox Code Playgroud)
VS
DELETE FROM dbo.MyTable
Run Code Online (Sandbox Code Playgroud)
看来和完成所有事情似乎他们都做了同样的事情; 但这两者之间是否存在差异?
可以在事务中使用SQL"truncate table"命令吗?我正在创建一个应用程序,我的表有大量的记录.我想删除所有记录,但如果应用程序失败,我将回滚我的事务.删除每条记录需要很长时间.我想知道我是否使用截断表,我是否仍然可以回滚事务并在发生故障时恢复数据.我意识到truncate table不会将每个删除写入事务日志,但我想知道它是否将页面释放写入日志以便回滚工作.
truncate ×10
sql-server ×3
double ×2
postgresql ×2
sql ×2
.net ×1
bash ×1
c# ×1
dynamic-sql ×1
ios ×1
iphone ×1
java ×1
objective-c ×1
plpgsql ×1
rounding ×1
scala ×1
shell ×1
sql-delete ×1
string ×1
t-sql ×1
transactions ×1
truncation ×1
uilabel ×1