小编Hug*_*ley的帖子

检查 postgres 表中列的唯一性

我需要确保表中的列中的值作为较大流程的一部分是唯一的。

我知道这个UNIQUE限制,但我想知道是否有更好的方法来进行检查。

我正在使用以下方式运行查询psycopg2,因此添加该标签,以防万一其中有可以帮助解决此问题的内容。

如果该列是唯一的,我可以添加一个约束。如果列不唯一,添加约束将返回错误。

如果已经存在同名的约束,则会返回有用的错误。在这种情况下,宁愿只检查现有的约束。

如果该列是主键,则可以添加唯一约束而不会出现错误,但在这种情况下,最好仅根据主键认识到该列必须是唯一的。

下面的代码示例。

DROP TABLE IF EXISTS unique_test;
CREATE TABLE unique_test (
pkey INT PRIMARY KEY,
unique_yes CHAR(1),
unique_no CHAR(1)
);

INSERT INTO unique_test (pkey, unique_yes, unique_no)
VALUES(1, 'a', 'a'),
        (2, 'b', 'a');
    
CREATE UNIQUE INDEX CONCURRENTLY u_test_1  ON unique_test (unique_yes);

ALTER TABLE unique_test
ADD CONSTRAINT unique_target_1
UNIQUE USING INDEX u_test_1;

-- the above runs no problem

-- check what happens when column is not unique

CREATE UNIQUE INDEX CONCURRENTLY u_test_2  ON …
Run Code Online (Sandbox Code Playgroud)

sql postgresql psycopg2

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

什么是命名号码?

我有一个数据结构,当我用谷歌搜索时,rstudio 将其识别为“命名数字”,结果谈论命名向量,但我没有看到提及命名数字。它们是一样的吗?

思考这个问题的最佳方式是什么?它是一本字典吗?两个列表的列表?

我的目标是按数字排序,然后按大小顺序获取名称。

print(my_named_number)

Baker Street       Charing Cross   Edgware Road (B)    Elephant & Castle 
           8.420070e-04                9.403936e-01                3.732567e-05                4.620485e-03 
             Embankment                   Harlesden          Harrow & Wealdston                Kensal Green 
           1.000000e+00                1.566635e-12                1.623611e-17                3.082285e-10 
Run Code Online (Sandbox Code Playgroud)

抱歉,这是不可重现的,我不知道如何构建命名数字,并且我正在使用的数据是由返回的列表的向量部分igraph:eigen_centrality(igraph_object)

编辑:

str(my_named_number)

Named num [1:4] 8.42e-04 9.40e-01 3.73e-05 4.62e-03
 - attr(*, "names")= chr [1:4] "Baker Street" "Charing Cross" "Edgware Road (B)" "Elephant & Castle" 
Run Code Online (Sandbox Code Playgroud)

r

6
推荐指数
1
解决办法
5747
查看次数

这个空间从哪里来?cat()

如果我运行:

r_2 = 0.89 # (wow that's an impressive R^2)
rmse = 24724.58
cat("R^2: ", r_2, '\n',"RMSE: ", rmse)
Run Code Online (Sandbox Code Playgroud)

在RStudio控制台中,它返回:

R^2:  0.89 
 RMSE:  24724.58
Run Code Online (Sandbox Code Playgroud)

很明显为什么之前有多余的空间RMSE吗?

r

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

为什么在if语句中使用变量比魔术数字快?

查看一些Leetcode问题,看到下面的求逆整数的解决方案

def reverse(self, x: int) -> int:
    maxint = 2147483649
    minint = -2147483648
    ans = int(str(abs(x))[::-1])
    return ans * (abs(x)//x) if minint < ans < maxint and ans else 0
Run Code Online (Sandbox Code Playgroud)

以为我可以通过替换变量minintmaxint使用值来显着提高速度。

def reverse(self, x: int) -> int:
    ans = int(str(abs(x))[::-1])
    return ans * (abs(x)//x) if -2147483648 < ans < 2147483649 and ans else 0
Run Code Online (Sandbox Code Playgroud)

(这个问题有点奇怪,因为它要求假设只有32位分配给一个整数,应该对它进行错误处理,而不是事后进行此奇怪的“检查”?)

第二个代码块在40毫秒内运行测试,而第一个代码块在28毫秒内运行。

为什么将变量用于if而不是值更快?

python

0
推荐指数
1
解决办法
48
查看次数

标签 统计

r ×2

postgresql ×1

psycopg2 ×1

python ×1

sql ×1