我遇到了我的主键序列与我的表行不同步的问题.
也就是说,当我插入一个新行时,我得到一个重复的键错误,因为串行数据类型中隐含的序列返回一个已经存在的数字.
这似乎是由导入/恢复不能正确维护序列引起的.
我需要检索表中的所有行,其中2列组合都是不同的.因此,我希望所有在同一天没有任何其他销售的销售以相同的价格出售.基于日期和价格的唯一销售将更新为活动状态.
所以我在想:
UPDATE sales
SET status = 'ACTIVE'
WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id)
FROM sales
HAVING count = 1)
Run Code Online (Sandbox Code Playgroud)
但是我的大脑比那更远了.
我在PostgreSQL中有一个包含22列的表,我想添加一个自动增量主键.
我试图创建一个名为idBIGSERIAL类型的列,但pgadmin响应错误:
ERROR: sequence must have same owner as table it is linked to.
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题?如何在PostgreSQL中添加创建自动递增主键而无需再次重新创建表?
我想为用户提供数据库的所有权限,而不是将其作为管理员.我想这样做的原因是,目前DEV和PROD是同一集群上的不同DB,因此我不希望用户能够更改生产对象,但它必须能够更改DEV上的对象.
我试过了:
grant ALL on database MY_DB to group MY_GROUP;
Run Code Online (Sandbox Code Playgroud)
但它似乎没有给予任何许可.
然后我尝试了:
grant all privileges on schema MY_SCHEMA to group MY_GROUP;
Run Code Online (Sandbox Code Playgroud)
它似乎允许我创建对象,但不允许查询属于其他用户的该架构上的\ delete对象
我可以继续在MY_SCHEMA上向用户授予USAGE权限,但是它会抱怨没有权限在桌子上......
所以我想我的问题是:是否有任何简单的方法可以在数据库上为用户提供所有权限?
我正在研究PostgreSQL 8.1.23.
我正在尝试将序列设置为特定值.
SELECT setval('payments_id_seq'), 21, true
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误:
ERROR: function setval(unknown) does not exist
使用ALTER SEQUENCE似乎也不起作用?
ALTER SEQUENCE payments_id_seq LASTVALUE 22
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?
参考:https://www.postgresql.org/docs/current/static/functions-sequence.html
我相信标题是不言自明的.如何在PostgreSQL中创建表结构以建立多对多关系.
我的例子:
Product(name, price);
Bill(name, date, Products);
Run Code Online (Sandbox Code Playgroud) 我在我的Codeigniter网站上使用PostgreSQL.我正在使用杂货店crud来添加,编辑和删除操作.在进行编辑或添加时,我想根据内容的ID动态重命名上传的文件.我可以使用杂货crud的callback_after_upload功能来做到这一点.
在添加新内容时,我想要内容的下一个ID.我尝试使用nextval()函数,但序列随之增加.如何在不使用nextval()函数的情况下获取序列的最后一个值?
或者有一种简单的方法可以做到这一点吗?
我的目标是在表中插入新行时自动插入主键字段.
如何在PostgreSQL中获得从一个会话到另一个会话的序列?
doubleemploi@hanbei:/home/yves$ psql -d test
Mot de passe :
psql (8.4.13)
Saisissez « help » pour l''aide.
test=> create sequence test001 start 10;
CREATE SEQUENCE
test=> select currval('test001');
ERREUR: la valeur courante (currval) de la séquence « test00 » n''est pas encore définie dans cette session
--- current value not yet defined this session (???)
test=> select setval('test001', 10);
setval
--------
10
(1 ligne)
test=> select currval('test00');
currval
---------
10
(1 ligne)
test=> \q
test@hanbei:/home/yves$ psql -d test
Mot …Run Code Online (Sandbox Code Playgroud) 说,我有一个表ResidentInfo,在这个表中我有唯一的约束HomeAddress,这是VARCHAR类型.对于将来的查询,我将在此列上添加索引.查询只有操作=,我将使用B-TREE模式,因为目前不建议使用哈希模式.
问题:从效率的角度来看,使用B-TREE,你认为我应该添加一个新的列,数字1,2,3 ....,N对应不同的homeaddress,而不是添加索引HomeAddress,我应该添加索引数字列?
我问这个问题因为我不知道索引是如何工作的.
我试图使用Check中的代码来确定Postgres中是否存在序列(plpgsql).
如果序列不存在则创建序列.两次运行此代码会导致异常:
序列......已经存在.
如果序列不存在,如何创建序列?
如果序列不存在,则不应写入任何消息且不应发生错误,因此我不能在该问题的另一个答案中使用存储过程,因为如果序列存在,它每次都会将消息写入日志文件.
do $$
begin
SET search_path = '';
IF not EXISTS (SELECT * FROM pg_class
WHERE relkind = 'S'
AND oid::regclass::text = 'firma1.' || quote_ident('myseq'))
THEN
SET search_path = firma1,public;
create sequence myseq;
END IF;
SET search_path = firma1,public;
end$$;
select nextval('myseq')::int as nr;
Run Code Online (Sandbox Code Playgroud) postgresql ×10
sql ×5
database ×2
codeigniter ×1
ddl ×1
distinct ×1
duplicates ×1
grant ×1
indexing ×1
many-to-many ×1
nextval ×1
plpgsql ×1
primary-key ×1
privileges ×1
sequence ×1
sql-update ×1