小编Nay*_*ani的帖子

如何在 PostgreSQL 11.1 中将现有列更改为 Identity

我想将我现有的列更改为 Postgres 数据库中的自动标识。
我试过下面的脚本,但它不起作用。
如果您有相同的解决方案,请
告诉我我不想使用 postgres SEQUENCE。我想使用GENERATED ALWAYS AS IDENTITY

ALTER TABLE public.patient ALTER COLUMN patientid Type int4 
USING patientid::int4 GENERATED ALWAYS AS IDENTITY;
Run Code Online (Sandbox Code Playgroud)

postgresql ddl identity

9
推荐指数
1
解决办法
8301
查看次数

如何在 PostgreSQL 11.1 中向标识列插入值

我想将我自己的值插入到身份列中。

表架构:

CREATE TABLE public.userdetail (
    userdetailid int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
    username varchar(30) NOT NULL,
    "password" varchar(1000) NOT NULL,
    CONSTRAINT pk_userdetail PRIMARY KEY (userdetailid)
);
Run Code Online (Sandbox Code Playgroud)

插入查询:

INSERT INTO UserDetail (UserDetailId,UserName, Password) 
  VALUES(1,'admin', 'password');
Run Code Online (Sandbox Code Playgroud)

这里插入查询抛出以下错误:

无法插入“userdetailid”列

是否有任何命令可以强制插入到身份列,如 MS SQL:

 SET IDENTITY_INSERT UserDetail ON
Run Code Online (Sandbox Code Playgroud)

如果您有任何解决方案,请告诉我。

database postgresql

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

SQL查询变量nvarchar(max)不能存储超过4000个字符

我在动态 sql 查询时遇到问题。
使用 nvarchar(max) 声明 sql 查询变量并构建动态查询,然后使用 sq_executesql 运行它。

请建议您是否有任何解决方案。
下面是我的代码片段:

DECLARE @count int, @sql nvarchar(max),@where nvarchar(max)
SELECT @count = 2, @where=' Where 1 = 1 '

set @sql = '
SELECT top 2
' + cast(@count as NVARCHAR) + ' as [Count],
Name,
1 AS Column1,2 AS Column2,3 AS Column3,4 AS Column4,5 AS Column5,6 AS Column6,7 AS Column7,8 AS Column8,9 AS Column9,10 AS Column10,11 AS Column11,12 AS Column12,13 AS Column13,14 AS Column14,15 AS Column15,16 AS Column16,17 AS Column17,18 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql database sql-server

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

使用postgres中表标识的最后一个值重置标识列

我想将我现有的列更改为 Postgres 数据库中的自动标识。
我使用下面的脚本来设置自动标识列并设置默认从 1 开始。
但在这里我想将标识列值重置为表的最后一个值。
如果您有任何解决方案,请告诉我。

ALTER TABLE patient 
    ALTER patientid SET NOT NULL,
    ALTER patientid ADD GENERATED ALWAYS AS IDENTITY (START WITH 1);
Run Code Online (Sandbox Code Playgroud)

在这里,我正在设置这样的东西:

 ALTER TABLE Patient 
   ALTER COLUMN PatientId RESTART WITH (select Max(patientId) + 1 from patient);
Run Code Online (Sandbox Code Playgroud)

postgresql database-sequence

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

无法更新表临时表,因为它没有副本标识并在 Postgres 中发布更新

我将 Postgres 数据库与复制一起使用。
我在 postgres 函数中使用了临时表。我无法在通过加入更新临时表时更新它。

下面是 Postgres 查询(tempallergyupdates是临时表):

 drop table if exists tempallergyupdates;
 create temp table tempallergyupdates(patientallergyid int,updateid int, newupdateid int);
 update tempallergyupdates set patientallergyid = 1;
Run Code Online (Sandbox Code Playgroud)

上面的查询抛出以下异常:

无法更新表“tempallergyupdates”,因为它没有副本标识并发布更新

database postgresql database-replication

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

如何在 PostgreSQL 中存储最多 3 毫秒数字的时间戳值

我必须在时间戳列中存储最多 3 毫秒的数字。
我在每个表中有两个固定列:createdDate、LastmodifiedDate。
插入 CreatedDate/LastmodifiedDate 的数据值时:

now() at time zone 'utc'
Run Code Online (Sandbox Code Playgroud)

但它存储的是 5 位毫秒数。
我只想存储毫秒的 3 个小数位。
让我建议哪种类型的数据类型仅存储毫秒的 3 位小数位。
如果您有任何解决方案,请告诉我。

postgresql timestamp

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

错误:在 Postgres 中发现了不止一个拥有的序列

我正在为Patient表的现有列设置标识列。
在这里,我想使用GENERATED ALWAYS AS IDENTITY

因此,我使用以下语句设置了标识列(以前是serial):

ALTER TABLE Patient ALTER PatientId
   ADD GENERATED ALWAYS AS IDENTITY (START WITH 1);
Run Code Online (Sandbox Code Playgroud)

对于现有的患者表,我总共有 5 条记录。( patientId1 到 5)
当我在身份设置后插入新记录时,它会抛出如下错误:

more than one owned sequence found
Run Code Online (Sandbox Code Playgroud)

即使在重置标识列后,我仍然遇到相同的错误。

ALTER TABLE Patient ALTER COLUMN PatientId RESTART WITH 6;
Run Code Online (Sandbox Code Playgroud)

如果您有任何解决方案,请告诉我。

postgresql identity-column database-sequence

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