标签: default-value

PostgreSQL中具有主键的重复行

假设我有一个名为 的表people,其中id是主键:

+-----------+---------+---------+
|  id       |  fname  |  lname  |
| (integer) | (text)  | (text)  |
+===========+=========+=========+
|  1        | Daniel  | Edwards |
|  2        | Fred    | Holt    |
|  3        | Henry   | Smith   |
+-----------+---------+---------+
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个行重复查询,该查询足够健壮,可以解释表的架构更改。每当我向表中添加一列时,我都不想回去修改重复查询。

我知道我可以做到这一点,这将复制记录 ID 2 并为复制的记录提供一个新 ID:

INSERT INTO people (fname, lname) SELECT fname, lname FROM people WHERE id = 2;
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加一age列,则需要修改查询以同时考虑年龄列。

显然我不能执行以下操作,因为它还会复制主键,从而导致duplicate key value violates unique constraint-- 而且,无论如何我都不希望它们共享相同的 ID:

INSERT INTO people …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql default-value postgresql-9.4

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

PostgreSQL,我的默认数据库的主机名地址是什么?

我刚刚在我的笔记本电脑上创建了一个 PostgreSQL 数据库(按照这些说明),它运行的是 Linux CentOS 7。

现在我想了解我的默认数据库的主机名地址是什么。我以为是,localhost但不是。

我想知道要与psql -h命令一起使用的名称或 IP 地址。基本上,运行此psql -h HOSTNAME命令应该让我psql单独获得与该命令相同的结果,即让我连接到我的数据库。

我的默认数据库的主机名地址是什么?

> service postgresql status 
Run Code Online (Sandbox Code Playgroud)

状态:

? postgresql.service - PostgreSQL 数据库服务器已加载:已加载(/usr/lib/systemd/system/postgresql.service;已启用;供应商预设:已禁用)活动:自 2017 年 3 月 30 日星期四 14:40:30 EDT 起处于活动状态(正在运行) ; 1 天 1 小时前主 PID: 2256 (postgres

而两者psql -h 127.0.0.1psql -h 127.0.0.1 -U davide产生此消息:

psql:致命:用户“david”的身份验证失败`

postgresql default-value address

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

找出必须在插入语句中指定哪些列

有时在具有多列的表中插入数据时,如果插入语句不应该失败,知道必须指定哪些列会很有用。

我写了这个查询来找出哪些列不可为空、标识、计算、时间戳和没有默认值。

select  *
from    sys.columns
where   object_id = object_id('<table>') and
        is_nullable = 0 and
        is_identity = 0 and
        is_computed = 0 and
        default_object_id = 0 and
        type_name(system_type_id) <> 'timestamp'
Run Code Online (Sandbox Code Playgroud)

此检查中是否应包含任何其他属性?

sql-server-2008 sql-server insert default-value

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

您可以在默认约束中使用插入的变量吗

在 SQL Server 中工作,假设我有一个包含两个表的数据库:eventscompetitors.

events 有以下列:

[event_id] [event_name] [winner_id] [loser_id]
Run Code Online (Sandbox Code Playgroud)

competitors 有以下列:

[comp_id] [comp_name]
Run Code Online (Sandbox Code Playgroud)

我想添加一个默认约束以[event_name]在插入新事件时节省我的时间。类似于:

ALTER TABLE [events]
ADD CONSTRAINT DF_event_name
DEFAULT CAST([winner_id] AS varchar(10)) + ' vs ' + CAST([loser_id] AS varchar(10)) FOR [event_name]
Run Code Online (Sandbox Code Playgroud)

当然,这是一个简化版本,它还需要使用competitors ON comp_id = winner_id and comp_id = loser_id.

当我尝试设置上述默认约束时,我得到了您可能期望的响应:

在此上下文中不允许使用名称“winner_id”。有效的表达式是常量、常量表达式和(在某些上下文中)变量。不允许使用列名。

那么有什么办法可以解决我想要做的事情吗?
有没有办法自动将单元格的值设置为实现从同一行插入的数据的字符串?如果可能的话,是否也可以使用 join 语句来完成?我的下一个想法是触发器。

join sql-server default-value cast

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

为什么只有当create语句中存在两个或多个时间戳字段时,mysql才会抛出“字段的默认值无效”?

在 mysql 5.7.28 中我创建了一个像这样的表:

create table t1 (
id int not null,
d1 timestamp) 
engine=innodb;
Run Code Online (Sandbox Code Playgroud)

工作正常并创建d1为, 。non-nulldefault value current_timetampon update current_timestamp

但是当我尝试创建具有两个时间戳字段的相同表时,如下所示:

create table t1 (
id int not null,
d1 timestamp,
d2 timestamp) 
engine=innodb;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

SQL 错误 (1067):“d2”的默认值无效

为什么只有在添加第二个时间戳字段时才会出现错误?
这是 mysql 中的错误还是某些预期行为?

mysql timestamp default-value mysql-5.7

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

添加新列时使用不为空的默认值是否安全?

我们有一个由 Postgresql v11.4提供支持的 Rails 应用程序,我想在其中添加一个具有默认值和非空约束的新列,如下所示:

ALTER TABLE "blogs" ADD "published" boolean DEFAULT FALSE NOT NULL
Run Code Online (Sandbox Code Playgroud)

我知道添加具有默认值的新列是安全的。但是,与 组合使用仍然安全吗NOT NULL?或者它会锁定数据库吗?谢谢!

postgresql null default-value alter-table postgresql-11

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

Reg:PostgreSQL 模式的默认权限

我有一种情况,许多用户可以跨所有可用模式创建数据库对象。

所有开发人员都使用一个通用用户 pg_dump_user 在需要时将整个数据库转储到他们的本地数据库。所以这个用户应该拥有对所有数据库对象的读取权限。

为了实现这一点,我尝试在架构级别和用户级别设置默认权限。

--为每个模式设置的默认权限

ALTER DEFAULT PRIVILEGES IN SCHEMA xyz GRANT SELECT ON TABLES to ro_user';
Run Code Online (Sandbox Code Playgroud)

--为每个用户设置的默认权限

ALTER DEFAULT PRIVILEGES FOR ROLE abc_user GRANT SELECT ON TABLES to ro_user' ;
Run Code Online (Sandbox Code Playgroud)

即使上面的设置存在,在某些时间之后这些都会消失,因为 ro_user 无法访问创建的新对象。

任何关于此的指针都会有所帮助,我的目标只是为用户实现对当前和未来所有对象的选择访问,以便执行 pg_dump。

postgresql permissions default-value

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

MySQL 中“microtime”列的默认值

我的兴趣是用 FSP 为 6 来存储时间。正如我所读到的,这不能用TIMESTAMPorDATETIME数据类型来实现。所以,我有一个double字段来存储microtime函数的输出。

无论如何我可以为这样的字段设置(甚至编写一些代码来创建)默认值吗?

我想使用类似的东西NOW(6)并获取1442059062.065123例如。

mysql timestamp default-value datetime

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

如何使用变量的值设置列 DEFAULT

在设置使用随机 UUID 作为主键的数据库的脚本中,我有:

CREATE TABLE alpha (id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), value INT);
CREATE TABLE beta (aref UUID REFERENCES alpha (id));

INSERT INTO alpha (value) VALUES (42);
Run Code Online (Sandbox Code Playgroud)

然后通过外键,让“alpha”中的记录成为插入“beta”表的默认目标:

DO $$
    DECLARE l_id UUID;
    BEGIN
        SELECT alpha.id FROM alpha INTO l_id;
        ALTER TABLE beta ALTER COLUMN aref SET DEFAULT l_id;
    END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
ERROR:  column "l_id" does not exist
CONTEXT:  SQL statement "ALTER TABLE beta ALTER COLUMN aref SET DEFAULT l_id"
PL/pgSQL function inline_code_block line 1 at SQL statement …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql default-value alter-table plpgsql

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

插入表,忽略具有默认值的列

我有一个 PostgreSQL 数据库,其中有很多相同结构的表,总共 36 列:

CREATE TABLE some_schema.some_table    (
    id integer NOT NULL DEFAULT nextval('some_schema.id_seq'::regclass),
    col2,
    col3,
    col4,
    [...],
    col35,
    mi_prinx integer NOT NULL DEFAULT nextval('some_schema.mi_prinx_seq'::regclass),
    CONSTRAINT some_table_pkey PRIMARY KEY (mi_prinx)
)
Run Code Online (Sandbox Code Playgroud)

在许多情况下,我必须从具有相同结构的另一个表中插入记录:

INSERT INTO some_schema.some_table (col2,col3...col35)
    SELECT col2,col3...col35
    FROM some_schema.another_table_with_same_structure;
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以做到这一点,而不必列出所有没有默认值的列?我想我可以以某种方式使用,但我无法根据文档DEFAULT VALUES获得正确的语法。

postgresql insert subquery default-value

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