小编Str*_*rae的帖子

Postgresql:最好使用多个数据库,每个数据库有1个模式,还是1个数据库有多个模式?

在对我的一个问题发表评论之后,我在想是否更好地使用带有X架构的1个数据库,反之亦然.

我的情况:我正在开发一个网络应用程序,当人们注册时,我创建(实际上)数据库(不,它不是社交网络:每个人都必须能够访问自己的数据,永远不会看到其他用户的数据).

这就是我用于我的应用程序的先前版本(仍然在mysql上运行)的方式:通过plesk api,对于每次注册,我这样做:

  1. 创建具有有限权限的数据库用户;
  2. 创建一个只能由以前创建的用户和超级用户访问的数据库(用于维护)
  3. 填充数据库

现在,我需要对postgresql做同样的事情(项目越来越成熟,mysql ......不能满足所有需求)

我需要使所有数据库/模式备份独立:pg_dump在两种方式下都能很好地工作,对于可以配置为仅访问1个模式或1个数据库的用户来说是相同的.

所以,假设你是比我更有经验的potgres用户,你认为对我的情况最好的解决方案是什么,为什么?

使用$ x db而不是$ x schemas会有性能差异吗?什么解决方案将来会更好地维护(可靠性)?

编辑:我差点忘了:我所有的数据库/模式将始终具有相同的结构!

Edit2:对于备份问题(使用pg_dump),使用1 db和多个模式可能更好,一次性转储所有模式:恢复将非常简单地在dev机器中加载主转储然后转储和恢复所需的模式:还有1个额外的步骤,但是倾倒所有架构似乎更快,然后逐个转储它们.

ps:对不起,如果我在文本中忘记了一些'W'字符,我的键盘会受到该按钮的影响;)

更新2012年

那么,应用程序的结构和设计在过去的两年中发生了很大变化.我仍在使用这种one db with many schemas方法,但是,我的应用程序的每个版本都有1个数据库:

Db myapp_01
    \_ my_customer_foo_schema
    \_ my_customer_bar_schema
Db myapp_02
    \_ my_customer_foo_schema
    \_ my_customer_bar_schema
Run Code Online (Sandbox Code Playgroud)

对于备份,我定期转储每个数据库,然后在开发服务器上移动备份.

我也使用PITR/WAL备份,但正如我之前所说,它不太可能我必须立即恢复所有数据库 ..所以它可能会被解雇今年(在我的情况下不是最好的方法).

从现在开始,1-db-many-schema方法对我来说非常有效,即使应用程序结构完全改变了:

我差点忘了:我所有的数据库/模式将始终具有相同的结构!

...现在,每个模式都有自己的结构,可以改变对用户数据流的反应.

database postgresql database-design database-permissions

133
推荐指数
6
解决办法
7万
查看次数

如何设置像'YYYYMM'这样的Postgresql默认值日期戳?

作为标题,我如何设置一个表的列,使其具有当前年份和月份的默认值,格式为"YYYYMM",如今的200905?

postgresql datetime default-value

38
推荐指数
3
解决办法
11万
查看次数

从文本文件中检索变量值的最佳方法 - Python - Json

参考这个问题,我有一个类似但不一样的问题..

在我的路上,我将有一些文本文件,结构如下:

var_a: 'home'
var_b: 'car'
var_c: 15.5
Run Code Online (Sandbox Code Playgroud)

我需要python读取文件,然后创建一个名为var_a的变量,其值为'home',依此类推.

例:

#python stuff over here
getVarFromFile(filename) #this is the function that im looking for
print var_b
#output: car, as string
print var_c
#output 15.5, as number.
Run Code Online (Sandbox Code Playgroud)

这是否可能,我的意思是,即使保留var类型?

请注意,我对文本文件结构有完全的自由,如果我提议的那个不是最好的,我可以使用我喜欢的格式.

编辑:ConfigParser可以是一个解决方案,但我不喜欢它,因为在我的脚本中我将有时参考文件中的变量

config.get("set", "var_name")
Run Code Online (Sandbox Code Playgroud)

但我喜欢的是直接引用变量,就像我在python脚本中声明的那样......

有一种方法可以将文件导入为python字典吗?

哦,最后一点,请记住,我不确切知道文本文件中有多少变量.

编辑2:我对stephan的JSON解决方案非常感兴趣,因为通过这种方式,可以使用其他语言(PHP,然后通过AJAX JavaScript)简单地读取文本文件,但是在执行该解决方案时我失败了:

#for the example, i dont load the file but create a var with the supposed file content
file_content = "'var_a': 4, 'var_b': 'a string'"
mydict = dict(file_content)
#Error: ValueError: dictionary update …
Run Code Online (Sandbox Code Playgroud)

python variables text-files

38
推荐指数
6
解决办法
12万
查看次数

如何显示空格和制表符但不是换行符?

我正试图从Komodo切换到Eclipse.

我无法弄清楚如何在eclipse中显示换行符 - 看起来它们与标签和其他空白字符一起显示.

有没有办法显示标签和其他空格字符,但没有显示换行符?

eclipse user-interface eclipse-pdt

33
推荐指数
4
解决办法
4万
查看次数

PHP PDO :: bindParam()数据类型..它是如何工作的?

我想知道bindParam()(或bindValue())中的数据类型声明用于...

我的意思是,我认为如果我定义一个整数参数(PDO::PARAM_INT),必须将参数转换为整数,类似于

$delete->bindParam(1, $kill, PDO::PARAM_INT);
// should work like
$delete->bindParam(1, (int)$kill);
Run Code Online (Sandbox Code Playgroud)

或者如果参数不是声明的类型,至少抛出一个错误.但这种情况并非如此.

谷歌搜索,我发现在php.net档案:

大家好,

我目前正在研究PDO.正好在bindParam()函数上.第三个参数data_type似乎在这里强制值的类型?但是当我尝试:

$sql = "INSERT INTO produit (idproduit, nom, marque) VALUES (NULL, :nom, :marque)";
$stmt = $dbh->prepare($sql);
$nom = 'Testarossa'; $marque = 'Ferrari' ;
$stmt->BindValue(':marque',$marque) ;
$stmt->BindParam(':nom',$nom,PDO::PARAM_INT) ;

$stmt->execute(); $nom = '250 GTO' ;
$stmt->execute(); ?>
Run Code Online (Sandbox Code Playgroud)

我希望在我的数据库中有PHP错误或整数.但在我的数据库中我有:

22 Testarossa Ferrari 23 250 GTO法拉利

这意味着如果我有第三个参数,它不会改变.或许我想念一些东西.有人能容忍我吗?或者只是有人告诉我在哪里可以找到有关它的信息.

问候,

Cyruss

这正是我的情况.我的想法出了什么问题?

php pdo types prepared-statement

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

蜜罐技术对垃圾邮件的效果如何?

通过"蜜罐",我的意思或多或少是这种做法:

#Register form
<style>
    .hideme{
        display:none;
        visibility: hidden;
    }
</style>
<form action="register.php">
    Your email: <input type="text" name="u-email" />
    Choose a password: <input type="text" name="passwd" />
    <div class="hideme">
        Please, leave this field blank: <input type="text" name="email" />  #the comment is for text-browser users
    </div>
    <input type="submit" value="Register" autocomplete=off />
</form>

//register.php
<?php
if($_POST['email'] != ''){
    die("You spammer!");
}
//otherwise, do the form validation and go on.
?>
Run Code Online (Sandbox Code Playgroud)

更多信息在这里.

显然,真实字段是用随机哈希命名的,而蜜罐字段可以有不同的名称(电子邮件,用户,网站,主页等等),这是spambot通常填写的.

我喜欢这种技术,因为它不会导致用户被CAPTCHA烦恼.

你有没有人对这种技术有一些经验?有效吗?

php spam-prevention spam honeypot

29
推荐指数
4
解决办法
2万
查看次数

在三个表上使用count()进行内连接

简单快速的问题,我有这些表:

//table people
| pe_id | pe_name |
| 1  | Foo  |
| 2  | Bar  |
//orders table
| ord_id | pe_id | ord_title   |
|   1    |   1   | First order |
|   2    |   2   | Order two   |
|   3    |   2   | Third order |
//items table
| item_id | ord_id | pe_id | title  |
|   1     |   1    |   1   | Apple  |
|   2     |   1    |   1   | Pear   | …
Run Code Online (Sandbox Code Playgroud)

sql join count

22
推荐指数
2
解决办法
10万
查看次数

为什么背景会破坏盒子阴影插入效果?

我试图在一个简单的盒子上实现内阴影效果,如: alt text http://gotinsane.com/test.jpg

绿色框是另一个框内的内容.

我的问题是,如果我给内容框任何类型的背景,外框盒阴影效果消失!

这里有一个我的问题的例子(有标记和css),我已经设置内容高度较小以证明问题 - 我真的不关心IE*,这只是一个测试.

任何的想法?

UPDATE

盒子里面的内容有点像幻灯片,这里是一个例子(原始问题).thirtydot的答案可以解决这个问题,但它迫使我做一点点破解,根据内容改变包装器背景:这里的例子(thirtydot trick).

这可以是一个解决方案,但我不喜欢它太多,仍然不明白为什么外框阴影得到内框背景(颜色,图像)

更新2

谈到另一个论坛上这个问题,我发现了另一种方式:基本上,而不是用box-shadow在包装,将作为一个面具,我使用box-shadowborder-radius直接对内容(.step元素)然而,"面具"效果正是我我试图完成,所以这不是解决方案.

我仍然不明白内部元素背景如何以及为什么干扰外部元素设计,或者为什么从外部元素掉落的阴影落在内部元素后面.这可能是一个css bug吗?

UPDATE3

有人在mozilla上打开了一个bug,得到了这个澄清"问题"的答案:

来自http://www.w3.org/TR/css3-background/#the-box-shadow:

在堆叠上下文和绘制顺序方面,元素的外部阴影直接绘制在该元素的背景下方,元素的内部阴影直接绘制在该元素的背景上方(在边框和边框图像下方,如果有的话).

特别是,元素的元素的背景将绘制在嵌入阴影之上(实际上它们在元素本身的边框和背景之上绘制).

因此渲染正是规范所要求的.

UPDATE4

Fabio A. 用css3pointer-events指出了另一个解决方案.看起来不错,也适用于IE8;)

css background shadow css3

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

PHP:'或'语句失败:如何抛出新的异常?

这里的每个人都应该知道'或'状态,通常粘在die()命令上:

$foo = bar() or die('Error: bar function return false.');
Run Code Online (Sandbox Code Playgroud)

大多数时候我们看到类似的东西:

mysql_query('SELECT ...') or die('Error in during the query');
Run Code Online (Sandbox Code Playgroud)

但是,我无法理解'或'语句究竟是如何工作的.

我想抛出一个新的异常而不是die(),但是:

try{
    $foo = bar() or throw new Exception('We have a problem here');
Run Code Online (Sandbox Code Playgroud)

不起作用,也不起作用

$foo = bar() or function(){ throw new Exception('We have a problem here'); }
Run Code Online (Sandbox Code Playgroud)

我发现这样做的唯一方法是这个可怕的想法:

function ThrowMe($mess, $code){
    throw new Exception($mess, $code);
}
try{
    $foo = bar() or ThrowMe('We have a problem in here', 666);
}catch(Exception $e){
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

但是有一种方法可以在'或'语句之后直接抛出新的异常吗?

或者这种结构是强制性的(我完全不依赖于ThrowMe功能):

try{
    $foo = bar();
    if(!$foo){ …
Run Code Online (Sandbox Code Playgroud)

php exception-handling exception logical-operators

19
推荐指数
1
解决办法
8829
查看次数

是'黑洞'表恶吗?

阅读这个问题我刚刚学会了blackhole表技巧的存在:基本上是使用单个表来插入数据,然后是在许多其他表中分割数据的触发器.

一旦开发项目的开发人员意识到这一点,我想知道这是否会导致问题.

这个tecnique的优点和缺点是什么?

编辑:当我看到这个例子时,我想到的眨眼是关于交易:如果由于某种原因交易失败,你会找到blackhole包含原始数据的行,用于历史目的,也许可以帮助调试 - 但这似乎成为我能看到的唯一+1黑洞.想法?

mysql database postgresql database-design

18
推荐指数
2
解决办法
3289
查看次数