标签: postgresql

如何在 PostgreSQL 中指定新列的位置?

如果我有一个包含列的表:

id | name | created_date
Run Code Online (Sandbox Code Playgroud)

并想添加一列,我使用:

alter table my_table add column email varchar(255)
Run Code Online (Sandbox Code Playgroud)

然后在列之后添加created_date列。

有什么办法可以指定新列的位置吗?例如,我可以在之后添加它name并得到一个表格,如:

id | name | email | created_date
Run Code Online (Sandbox Code Playgroud)

postgresql database-design

106
推荐指数
3
解决办法
12万
查看次数

如何在没有密码提示的情况下使用 psql?

我写了一个脚本来REINDEX索引数据库中的索引。这是其中之一:

echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
    echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
    echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

问题是我无法在独立模式下运行此脚本。psql每次运行都提示输入密码。还有两个限制:

  1. 我无法在没有密码的数据库上创建用户。

  2. 因为REINDEX锁表,我应该sleep <num>在每个REINDEX.

有没有自动解决方案?

postgresql psql

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

复合索引是否也适用于第一个字段的查询?

假设我有一个包含字段A和的表B。我在A+上进行常规查询B,所以我在 上创建了一个复合索引(A,B)A复合索引是否也会对查询进行全面优化?

此外,我在 上创建了一个索引A,但 Postgres 仍然只使用复合索引来查询A。如果前面的答案是肯定的,我想这并不重要,但是为什么它默认选择复合索引,如果单个A索引可用?

postgresql performance index database-design index-tuning

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

如何将 JSON 数组转换为 Postgres 数组?

我有一个data类型的列,json其中包含这样的 JSON 文档:

{
    "name": "foo",
    "tags": ["foo", "bar"]
}
Run Code Online (Sandbox Code Playgroud)

我想将嵌套tags数组转换为连接字符串 ( 'foo, bar')。array_to_string()从理论上讲,使用该函数很容易做到这一点。但是,此功能不接受json输入。所以我想知道如何将这个 JSON 数组变成 Postgres 数组(类型text[])?

postgresql array postgresql-9.3 json

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

Postgres 中 UUID 列的默认值

Postgres 9.x 中,对于类型为 的列UUID,如何指定要自动生成的 UUID 作为任何行插入的默认值?

postgresql default-value uuid

96
推荐指数
3
解决办法
15万
查看次数

哪个更快,一个大查询还是多个小查询?

我一直在为不同的公司工作,我注意到他们中的一些人更喜欢拥有将所有“亲戚”加入表格的视图。但是在应用程序中,有时我们只需要使用 1 列。

那么只进行简单的选择,然后将它们“加入”到系统代码中会更快吗?

该系统可以是 php、java、asp 或任何连接到数据库的语言。

所以问题是,从服务器端(php、java、asp、ruby、python...)到数据库并运行一个查询来获取我们需要的一切或从服务器端到数据库并运行哪个更快?一次只从一个表中获取列的查询?

mysql postgresql performance join query-performance

93
推荐指数
2
解决办法
13万
查看次数

存储过程可以防止 SQL 注入吗?

存储过程真的可以防止针对 PostgreSQL 数据库的 SQL 注入攻击吗?我做了一点研究,发现即使我们只使用存储过程,SQL Server、Oracle 和 MySQL 也不能安全地抵御 SQL 注入。但是,这个问题在 PostgreSQL 中不存在。

PostgreSQL 核心中的存储过程实现是防止 SQL 注入攻击还是其他什么?或者即使我们只使用存储过程,PostgreSQL 是否也容易受到 SQL 注入的影响?如果是这样,请给我举个例子(例如书籍、网站、论文等)。

postgresql security sql-injection

85
推荐指数
5
解决办法
1万
查看次数

在 PostgreSQL 中使用索引

我有几个关于在 PostgreSQL 中使用索引的问题。我有一个Friends带有以下索引的表:

   Friends ( user_id1 ,user_id2) 
Run Code Online (Sandbox Code Playgroud)

user_id1并且user_id2user表的外键

  1. 这些是等价的吗?如果不是,那为什么?

    Index(user_id1,user_id2) and Index(user_id2,user_id1)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果我创建主键(user_id1,user_id2),它会自动为它创建索引吗?

    如果第一个问题中的索引不相等,那么在上面的主键命令上创建了哪个索引?

postgresql index primary-key

85
推荐指数
5
解决办法
3万
查看次数

如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

我有一张桌子:

CREATE TABLE names (id serial, name varchar(20))
Run Code Online (Sandbox Code Playgroud)

我想要那个表中的“最后插入的 id”,而不是RETURNING id在插入时使用。好像有一个函数CURRVAL(),但我不明白如何使用它。

我试过:

SELECT CURRVAL() AS id FROM names_id_seq
SELECT CURRVAL('names_id_seq')
SELECT CURRVAL('names_id_seq'::regclass)
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用。如何使用currval()获取最后插入的 ID?

postgresql sequence

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

如何在 PostgreSQL 中列出表的所有约束?

如何列出PostgreSQL中表的所有约束(主键,检查,唯一互斥,..)?

postgresql

81
推荐指数
3
解决办法
12万
查看次数