我正在尝试通过编写备份和还原脚本来复制数据库。我的备份程序工作正常,但我不断收到错误消息
已为文件指定了冲突的文件重定位。只应为任何逻辑文件名指定一个 WITH MOVE 子句。
当我运行该程序进行还原时。
这是程序代码。谁能发现我的错误是什么?
ALTER PROCEDURE spDBRestore (@BackupName NVARCHAR(50), @RestoreName NVARCHAR(50))
AS
BEGIN
DECLARE @BackupPath NVARCHAR(4000) = 'S:\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\TemplateCopy\'+@BackupName+'.BAK',
@NewDBFileName NVARCHAR(4000) = 'S:\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\'+@RestoreName+'.mdf',
@NewLFFileName NVARCHAR(4000) = 'L:\MSSQL10_50.MSSQLSERVER\MSSQL\Data\'+@RestoreName+'_1.ldf'
select @BackupName, @RestoreName, @NewDBFileName, @newlffilename
RESTORE DATABASE @RestoreName
FROM DISK = @BackupPath
WITH FILE = 1,
MOVE @BackupName TO @NewDBFileName,
MOVE @BackupName TO @NewLFFileName,
NOUNLOAD,
REPLACE;
END
Run Code Online (Sandbox Code Playgroud) 有简单的Int Identity我PK。
表有 220 万行。
删除了零行,从未禁用身份。
一次通过 .NET 插入一行,每次插入都检索SCOPE_IDENTITY().
20 与它的一些 FK 关系。
我有 98% 的碎片。
知道是什么原因造成的吗?
我知道修复是重建,今晚会这样做。
我想知道如何避免它。
自从填充以来,我已经添加了 3 列。
一些列几乎修改了每个值。
属性的长度没有太大变化。
表定义
/****** Object: Table [dbo].[docSVsys] Script Date: 02/13/2013 15:52:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[docSVsys](
[sID] [int] IDENTITY(1,1) NOT NULL,
[sParID] [int] NULL,
[docID] [varchar](100) NOT NULL,
[attBeg] [varchar](100) NULL,
[attEnd] [varchar](100) NULL,
[docDate] [smalldatetime] NULL,
[addDate] [smalldatetime] NOT NULL,
[mimeType] [varchar](40) …Run Code Online (Sandbox Code Playgroud) 当我使用这个查询时,一切都很好:
UPDATE users
SET f_name='Mike',
l_name='MyLastName',
username='blabla',
"password"='asdfsdaf',
"class"=12,
lang='en'
WHERE id=50;
Run Code Online (Sandbox Code Playgroud)
我创建了一个结合了两个表的视图:
CREATE OR REPLACE VIEW students_data AS
SELECT students.id,
users.f_name,
users.l_name,
users.username,
users."password",
users."class",
users.permission,
users.sessionid,
users.lastlogin,
users.lang
FROM students
LEFT JOIN users ON students.id = users.id;
Run Code Online (Sandbox Code Playgroud)
我还创建了这个规则:
CREATE OR REPLACE RULE students_data_update AS
ON UPDATE TO students_data DO INSTEAD
UPDATE users
SET f_name = new.f_name,
l_name = new.l_name,
username = new.username,
"password" = new."password",
"class" = new."class",
permission = new.permission,
sessionid = new.sessionid,
lastlogin = new.lastlogin,
lang …Run Code Online (Sandbox Code Playgroud) 我需要按对象 id 从 postgres 9.2+postgis 2.1 数据库中提取(复制)所有 hstore 标签到一个外部文件中进行后处理。由于每条记录的键和值各不相同,而且我不知道键或值是什么,因此我必须使用通配符。
遗憾的是,我的秘密解码器环似乎让我失望了,因为我尝试过的一切都没有奏效,可能是因为我所有的专业知识都在 vanilla sql 和 mysql/mariadb 上。
非常感谢您的帮助。
我从 table 中得到了一堆 id messages,我想更新 table activities。这就是我想象我的查询会起作用的方式(因此您可以更好地了解我要完成的任务):
update activities
set activities.created_at = messages.created_at,
set activities.updated_at = messages.updated_at
from messages
where messages.id in (1,2,3)
activities.trackable_id in (1,2,3)
Run Code Online (Sandbox Code Playgroud)
在 中activities,trackable_id是messages表的外键。所以我需要在活动表中为一些消息设置权限created_at和updated_at时间。
所以基本上activity表格是表格的副本,messages但只是另一种格式。
如何更新活动表中某些消息 ID 的 created_at 和 updated_at,但使用消息表中的数据(数据为 updated_at 和 created_at)?
我的两个 postgresql 服务器配置为流复制,工作正常。
Pgpool 配置为主从模式/负载平衡模式。
pgpool.conf:
listen_addresses = '*'
port = 9999
backend_hostname0 = 'master-postgres-ip'
backend_port0 = port-no
backend_weight0 = 1
backend_data_directory0 = 'data-dir'
backend_hostname1 = 'slave-postgres-ip'
backend_port1 = port-no
backend_weight1 = 1
backend_data_directory1 = 'data-dir'
load_balance_mode = on
master_slave_mode = on
master_slave_sub_mode='stream'
Run Code Online (Sandbox Code Playgroud)
我预计所有写入查询都将转到主查询,而读取查询将分布在两个查询之间。但是,所有的查询都只是为了掌握。但是,如果我停止主控,查询将变为从属。
有人可以告诉我可能出了什么问题吗?
pgpool 在启动时给出以下日志:
2015-11-03 17:25:56: pid 21284: LOG: find_primary_node: checking backend no 0
2015-11-03 17:25:56: pid 21284: LOG: find_primary_node: checking backend no 1
2015-11-03 17:25:56: pid 21284: DEBUG: SSL is requested but SSL support is not …Run Code Online (Sandbox Code Playgroud) 我的开发服务器上有两个 PostgreSQL 数据库,一个用于开发,另一个用于测试 Web 应用程序的生产。当我使用早期版本的 PostgreSQL 时,我能够在 pgAdmin 中轻松创建我的 prod 数据库的 TAR 转储文件,并在选择首先清理数据库的选项后使用相同的 TAR 文件来恢复我的开发数据库。不久前,我将 pgAdmin 升级到了应该可以与 PostgreSQL 9.4 一起使用的版本(我认为是 1.20.0)。无论出于何种原因,我无法恢复该版本中的文件。我尝试过 TAR 和 SQL,但恢复按钮始终受到保护。
我决定使用pg_dump并创建一个仅包含生产数据库数据插入语句的 SQL 文件。我想做的是复制我在 pgAdmin 中能够做的事情:清理我的开发数据库并将我的pg_dumpSQL 文件加载到其中。
我已经搜索过,但到目前为止我还没有找到任何如何在 pgAdmin 或终端中执行此操作的示例。
我目前正在从我的数据库中获取昨天的所有数据,但我想获取每小时的数据。这是我的查询:
select
camera_id,
count(*) as snapshot_count
from snapshots
where created_at >= TIMESTAMP 'yesterday'
and created_at < TIMESTAMP 'today'
group by camera_id
Run Code Online (Sandbox Code Playgroud)
它给了我昨天的所有记录,但是怎么可能从昨天获取记录但每个小时?
PS:我想在一个查询中运行它,而不是 24 个查询
如何COPY在 Postgres 中创建 CSV 文件以及不在 CSV 中的列的静态数据?在 MySQL 中,我可以LOAD DATA INFILE ...对列名以及文件中不存在的列的任何值进行分析。我想用 Postgres 做类似的事情,但COPY命令不支持。
如果表在模式中不包含该列,您能否给出向所有表添加一列的命令?
例如,模式schema1包含 50 个表,其中 20 个表包含名为 的列colTest。
我需要将该列添加colTest到剩余的 30 个表中。
postgresql ×7
sql-server ×2
backup ×1
bulk-insert ×1
dynamic-sql ×1
hstore ×1
pg-dump ×1
pgadmin ×1
pgpool ×1