小编dez*_*zso的帖子

移动数据库的推荐方法是什么?

我想知道在 SQL Server 中将数据库和数据从开发移动到预生产到生产的推荐方法。数据库最初是在 MS Access 中创建的,因此需要升级到 SQL Server

我读过的 3 个选项:(我确定还有其他选项)

  • 使用分离和附加 - 我被引导相信这不会提供干净的构建并且可能会导致问题但很容易做到,因为只是移动/复制 .mdf、.ldf 文件
  • 将数据库和对象脚本化到每个环境中 - 这提供了一个干净的构建,但更耗时
  • 进行备份/恢复 - 需要更长的时间,但似乎是一种受欢迎的方法。

任何建议最欢迎。

sql-server migration

3
推荐指数
1
解决办法
201
查看次数

在 where 子句中使用特定的数组列

有一个返回数组的函数,在查询中我们使用该函数返回结果,例如:

{"TUNDUMA GOING (BORDER)","ARRIVAL DATE",09/01/2016,22,"AT CHECKPOINT"}
{"TUNDUMA RETURN (BORDER)","DEPARTURE DATE",29/01/2016,2,"ON THE ROAD"}
Run Code Online (Sandbox Code Playgroud)

我们如何添加一个WHERE子句,该子句将仅通过搜索ON THE ROAD值的数组的第 5 列进行过滤?

有没有办法参考array[4]

试过

where trip_status(tlid) <@ array['AT CHECKPOINT']::varchar
Run Code Online (Sandbox Code Playgroud)

trip_status()是一个返回数组的功能,但我发现了以下错误:

Query failed: ERROR: operator does not exist: character varying[] <@ character varying 
LINE 6: ...ere trip_closed(tlid)=false and trip_status(tlid) <@ array[ ... ^ 
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

类似的东西where trip_status(tlid)[4] = 'AT CHECKPOINT'存在吗?

postgresql array where postgresql-9.5

3
推荐指数
1
解决办法
1209
查看次数

聚合 nvarchar2 列并在 nvarchar2 中获得结果

我需要创建一个带有聚合列的视图 nvarchar2(4000)在 Oracle 11g 中。

我拥有的:

Table1每一列类型nvarchar2(4000)

Col_Name   txt_value
X                   a
X                   b
X                   c
Y                   a
Y                   c
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的视图,两列类型为nvarchar2(4000)

Col_Name   txt_value
X                   a;b;c
Y                   a;c
Run Code Online (Sandbox Code Playgroud)

我试过:

CREATE VIEW dict (col_Name, txt_value) AS 
SELECT col_Name, LISTAGG (txt_value,';') WITHIN GROUP (ORDER BY txt_value)
FROM table1
GROUP BY col_Name 
Run Code Online (Sandbox Code Playgroud)

唯一的问题是LISTAGG()将结果转换为varchar2(4000)我需要的 bit类型的列nvarchar2

oracle oracle-11g

3
推荐指数
1
解决办法
2498
查看次数

SQL - 查找作为我的字符串前缀的记录

我有一个名为prefix存储“aaaa”的列的表。我的应用程序有一个很长的字符串,例如。'aaaabbbbccccdddd'。我想选择特定列是“aaaabbbbccccdddd”前缀的所有行。前缀的长度是可变的。

我怎样才能在 Postgres 中做到这一点?

我试过

SELECT * FROM my_table WHERE '%' || prefix || '%' ILIKE 'aaaabbbbccccdddd'
Run Code Online (Sandbox Code Playgroud)

但它不匹配。

postgresql

3
推荐指数
2
解决办法
6750
查看次数

Postgres - 使用外键约束导入多行

我似乎无法为我的问题找到答案,也许我没有问正确的问题,但它是这样的:

我在 pgAdmin 中基本上有两个表,比如说studentand grades,最终有一个外键约束(student_id 引用 student(id)

CREATE TABLE student (
    id CHAR(2),
    name CHAR(4),
PRIMARY KEY (id));

CREATE TABLE grade (
    student_id CHAR(2),
    grade INT,
FOREIGN KEY (student_id) REFERENCES student(id));
Run Code Online (Sandbox Code Playgroud)

我想做的是将两个文件复制/导入到数据库中。一切对学生都有好处,但我的grade.csv文件将包含不存在的学生 ID,我希望导入忽略而不是插入它们。取而代之的是,命令失败,没有导入任何内容。

什么是正确有效的方法来做到这一点?

postgresql foreign-key insert pgadmin

3
推荐指数
1
解决办法
2118
查看次数

epoch 的简写

是否有 epoch 的速记,而不必一直打字'1970-1-1 00:00:00'

postgresql datetime

3
推荐指数
1
解决办法
44
查看次数

保护内部员工的数据

在我们的数据库(为简洁起见是 DB)中,我们存储了一些非常敏感的政府数据,并希望尽可能保护这些数据。

这里有两种考虑安全性的方法:

  1. 防御外部入侵者(例如,基本上确保 PCI-DSS 合规性),
  2. 内部入侵者的安全。

我的问题集中在后者。

信息的敏感性被认为如此之高,以至于我们面临着内部员工极有可能接触到这些数据的可能性。

换句话说,我们担心内部员工可以批量窃取数据并进行交易(数据只有在完全被盗时才有意义,因为它是人们私人信息的巨大数据库)。

我们的应用程序以逐条记录的方式访问数据库。这被认为是好的,因为使用逐条记录方式访问数据人员不会大规模窃取信息。

一个显而易见的解决方案是:将“数据库的钥匙”交给一个最值得信赖的人。然而,我们担心的是,即使在这种情况下,有人也可以用枪指着他的头并要求制作 DB 的副本。

有什么办法可以保护数据库,这样即使 DBA 用枪指着他的头,他也无法窃取数据?


注意:我们使用的数据库管理系统是 PostgreSQL,但如果它提供我们正在寻求的安全保证,我们可以轻松切换到另一个。

security database-design

3
推荐指数
1
解决办法
128
查看次数

3
推荐指数
1
解决办法
7278
查看次数

正则表达式难度

我试图456从字符串中提取:123:456:如下:

select regexp_substr(':123:456:', ':(\d+):', 1, 2, 'i', 1) from dual
Run Code Online (Sandbox Code Playgroud)

但是,此查询返回null。我究竟做错了什么?

oracle regular-expression oracle-11g

2
推荐指数
1
解决办法
115
查看次数

只应为任何逻辑文件名指定一个 WITH MOVE 子句

我正在尝试通过编写备份和还原脚本来复制数据库。我的备份程序工作正常,但我不断收到错误消息

已为文件指定了冲突的文件重定位。只应为任何逻辑文件名指定一个 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)

sql-server-2008 sql-server backup stored-procedures

2
推荐指数
1
解决办法
2852
查看次数