标签: postgresql

如何使用脚本为 PostgreSQL 数据库设置密码?

在我正在编写的 bash 脚本中,我需要创建一个数据库并设置一个由我的脚本自动生成的密码。

问题是我找不到在没有用户交互的情况下设置密码的方法。

我需要这样的东西:

$ createdb mydb -p $(cat password_file)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

postgresql linux scripting

6
推荐指数
2
解决办法
7395
查看次数

PostgreSQL CREATE TABLE 创建的所有者不正确

我正在使用 PostgreSQL 9.2.4。当我在非超级用户拥有的数据库中以非超级用户身份创建表时,它归postgres用户所有,因此除非我明确授予自己权限,否则我无法将任何数据放入其中。

我创建了这样的非超级用户:

admin_user=# create role "test1" NOINHERIT LOGIN ENCRYPTED PASSWORD 'wibble' CONNECTION LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个test1像这样拥有的数据库:

admin_user=# create database "test1$db1" with owner "test1";
Run Code Online (Sandbox Code Playgroud)

然后我以 user 身份启动了一个新的 psql test1,并创建了一个表:

test1$db1=> create table test_table (column_name varchar(50));
Run Code Online (Sandbox Code Playgroud)

但我无法插入其中:

test1$db1=> insert into test_table values ('some data');                                                                                                    
ERROR:  permission denied for relation test_table
Run Code Online (Sandbox Code Playgroud)

检查权限显示该表归postgres用户所有:

test1$db1=> \dt
             List of relations
 Schema |      Name      | Type  |  Owner   
--------+----------------+-------+----------
 public | test_table     | table | postgres
Run Code Online (Sandbox Code Playgroud)

但是,我可以授予自己权限并执行以下操作:

test1$db1=> grant …
Run Code Online (Sandbox Code Playgroud)

postgresql permissions postgresql-9.2

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

可以在 Postgres 8.4 中嵌套插入吗?

我正在尝试将数据导入库存类型数据库。这是我的表格(为简洁起见被截断):

创建类型主机为 enum ('Physical', 'Virtual', 'Hypervisor', 'Other');

创建表主机(
  id 串行主键,
  主机名 varchar(40),
  角色hostrole
);

创建表接口(
  id 串行主键,
  名称 varchar(20),
  主机 int 在删除级联上引用主机(id),
  mac macaddr
);

我知道我可以将 a 嵌套select到一个insert语句中,我的问题是我是否可以insert将 an嵌套到 an 中insert(如果可以,该怎么做)。这是我试图运行的语句:

插入界面 
  (姓名, 
   苹果电脑, 
   主持人) 
     价值观 
  ('eth0', 
   '00:50:56:9d:34:d4', 
   (插入主机(主机名,主机角色)值('foobar','Virtual')返回 id)
);

错误出现在嵌套插入的“进入”处。我可以一次性完成此操作,还是必须进行单独的查询才能执行此插入操作?

postgresql insert

6
推荐指数
2
解决办法
2370
查看次数

错误:无法在 TEMP 环境变量路径中写入

我安装PostgreSQL 9.2.4-1-windows.exeWindows 7 64Service Pack 1

我得到以下,似乎相当有名的错误:

出现错误。

无法在 TEMP 环境变量路径中写入。

这会在启动后立即发生。我看到 postgresql 飞溅,然后发生此错误。

到目前为止我在互联网上找到的所有东西,我都试过了。这包括:

  1. 禁用所有杀毒软件。我也停止了启动中的一切。
  2. 检查.VBS脚本的文件关联。没有任何异常(Windows Script Host 已注册)
  3. Windows Script Host 已启用。
  4. 我试过以管理员和其他具有管理员权限的用户身份安装。
  5. 我已经HKLM\SOFTWARE\PostgreSQL\Installations手动创建了密钥并赋予它全部权限。
  6. 我已经Everyone完全访问C:\Users\[username]\AppData\Local\Tempc:\temp

基本上前 10 名谷歌点击中的所有内容。

我正在使用 32 位版本,但 64 位版本安装失败并出现相同的错误。我能够在具有类似配置的其他机器上成功安装。

我还能尝试什么?

安装日志文件:

日志开始于 2013 年 9 月 20 日 11:55:16 首选安装模式:qt 尝试在模式 qt 模式下初始化安装程序 qt 成功初始化执行 C:\Users\chad\AppData\Local\Temp/postgresql_installer_67b274715d/temp_check_comspec.bat 脚本退出代码:0

脚本输出:“测试正常”

脚本标准错误:

找不到注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\PostgreSQL\Installations\postgresql-9.2 数据目录。将变量 iDataDirectory 设置为空值 …

postgresql windows installation postgresql-9.2

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

Postgres 是否忽略了我的函数成本注释?

为什么会这样:

create or replace function dummy() returns double precision as $$
SELECT random() $$
LANGUAGE SQL
COST 777;
explain select dummy();
Run Code Online (Sandbox Code Playgroud)

返回这个:

Result  (cost=0.00..0.01 rows=1 width=0)
Run Code Online (Sandbox Code Playgroud)

而不是777的成本?

postgresql functions postgresql-9.2

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

仅当第三列为 NOT NULL 时才使用两列外键约束

鉴于以下表格:

CREATE TABLE verified_name (
  id               SERIAL PRIMARY KEY,
  name             TEXT NOT NULL,
  email            TEXT NOT NULL,
  UNIQUE (name, email)
);

CREATE TABLE address (
  id               SERIAL PRIMARY KEY,
  name             TEXT NOT NULL,
  email            TEXT NOT NULL,
  verified_name_id INTEGER NULL REFERENCES verified_name(id)
);
Run Code Online (Sandbox Code Playgroud)

如何添加附加约束,当address.verified_name_id不为 NULL 时,nameemail字段address必须与引用的字段匹配verified_name

我尝试将以下内容添加到address

FOREIGN KEY (name, email) REFERENCES verified_name(name, email)
Run Code Online (Sandbox Code Playgroud)

...但即使verified_name_id是 NULL ,该约束也会被应用。

我正在寻找类似于部分索引语法的东西,带有像这样的子句WHERE verified_name_id IS NOT NULL,但是简单地将这样的子句附加到 …

postgresql normalization foreign-key database-design constraint

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

序列末尾的 Postgresql 行为

根据主题,当序列达到其最大值时会发生什么?

行为是什么?我有一个以序列作为主键的大表,想知道。

谢谢。

postgresql sequence

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

如何配置从 PostgreSQL (RDS) 到 vanilla PostgreSQL 的复制?

我有一个 Amazon RDS Postgres 数据库,我创建了一个“复制器”用户并授予它“复制”权限。

db=> create role replicator login password 'something';
CREATE ROLE
db=> alter role replicator replication;
ALTER ROLE
db=>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试pg_basebackup从目标主机运行以创建副本时,出现 pg_hba.conf 错误:

# pg_basebackup -D /data/from-master -U replicator -h db-master.example.com -v
pg_basebackup: could not connect to server: FATAL:  no pg_hba.conf entry for replication connection from host "10.1.20.19", user "replicator", SSL on
FATAL:  no pg_hba.conf entry for replication connection from host "10.1.20.19", user "replicator", SSL off
Run Code Online (Sandbox Code Playgroud)

问题是,这是 RDS,我根本无法访问 pg_hba.conf。有任何想法吗?

postgresql replication aws amazon-ec2

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

每个用户的记录数量有限的分层结构

我正在为附属网络规划架构。对于所有分层查询,我都使用 Postgrestablefunc扩展,但这是另一个问题。
任何用户最多只能推荐 3 个其他用户。
所以例如我有这样的用户关系:

CREATE TABLE users
(
  id serial NOT NULL,
  referred_by integer NOT NULL,
  created_at time without time zone NOT NULL,
  updated_at time without time zone NOT NULL,
  CONSTRAINT primary_key PRIMARY KEY (id),
  CONSTRAINT referred_foreign FOREIGN KEY (referred_by)
      REFERENCES users (id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE
)
Run Code Online (Sandbox Code Playgroud)

我可以使用connectby函数来查询任何层次结构。但是当涉及到插入相关模型时,我必须检查用户在插入任何新用户之前是否还没有推荐其他 3 个用户。如果他已经有 3 个用户,那么它需要将树级联起来并将其作为树的叶节点,这对于在更大的层次结构上运行是进一步的繁重查询。

用于将新用户级联到叶节点是否可以确定可以放置新用户的最近节点?例如如果这是表中的数据:

                    ____________ A ___________
                   /             |            \
                __ B __       __ C __     ____ D ____
               / …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design hierarchy

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

为 UPDATE 写入的 TOAST 行是否不会更改 TOASTable 列?

想象一下,我在 Postgres 13 中有一个像这样的表:

CREATE TABLE public.people (
    id integer PRIMARY KEY,
    full_name character varying(255),
    bio text
);
Run Code Online (Sandbox Code Playgroud)

然后,我插入一行包含足够字符的行,以便将简介写入 TOAST 表:

# insert into people values (1, 'joe user', (SELECT array_to_string(ARRAY(SELECT chr((65 + round(random() * 25)) :: integer) FROM generate_series(1,4000)), '')));
INSERT 0 1
Run Code Online (Sandbox Code Playgroud)

最后,我更新该行而不更改 TOAST 列:

# update people set full_name='jane user' where id=1;
UPDATE 1
Run Code Online (Sandbox Code Playgroud)

是否UPDATE更改关联 TOAST 表中的任何行(或根本需要任何写入)?

上下文:我正在处理一些每秒有数千个事务的数据库表,并且观察到服务器上的写入负载非常高。我想知道UPDATETOAST 中具有较大值但 TOAST 值本身大部分不变的元组是否会增加写入负载并且值得优化。

postgresql storage update

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