Questions tagged «postgresql»

PostgreSQL是一个开放源代码的,对象关系数据库管理系统(ORDBMS),可用于所有主要平台,包括Linux,UNIX,Windows和OSX。提出问题时,请注明确切的Postgres版本。有关管理或高级功能的问题最好直接到dba.stackexchange.com。

8
Postgres唯一约束与索引
正如我可以理解文档下面的定义是等价的: create table foo ( id serial primary key, code integer, label text, constraint foo_uq unique (code, label)); create table foo ( id serial primary key, code integer, label text); create unique index foo_idx on foo using btree (code, label); 但是,Postgres 9.4手册中的注释指出: 向表添加唯一约束的首选方法是ALTER TABLE ... ADD CONSTRAINT。使用索引强制实施唯一约束可以被认为是不应直接访问的实现细节。 (编辑:此说明已从Postgres 9.5的手册中删除。) 只是风格上的问题吗?选择这些变体之一会带来哪些实际后果(例如性能)?
156 sql  postgresql  unique 

10
截断Postgres数据库中的所有表
重建之前,我通常需要从PostgreSQL数据库中删除所有数据。我将如何直接在SQL中执行此操作? 目前,我设法提出了一条SQL语句,该语句返回我需要执行的所有命令: SELECT 'TRUNCATE TABLE ' || tablename || ';' FROM pg_tables WHERE tableowner='MYUSER'; 但是,一旦有了它们,我就看不到以编程方式执行它们的方法。

9
备份/还原Docker化的PostgreSQL数据库
我正在尝试按照Docker网站上的说明备份/还原PostgreSQL数据库,但数据未还原。 数据库映像使用的卷为: VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"] CMD为: CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"] 我使用以下命令创建数据库容器: docker run -it --name "$DB_CONTAINER_NAME" -d "$DB_IMAGE_NAME" 然后,我连接另一个容器以手动插入一些数据: docker run -it --rm --link "$DB_CONTAINER_NAME":db "$DB_IMAGE_NAME" sh -c 'exec bash' psql -d test -h $DB_PORT_5432_TCP_ADDR # insert some data in the db <CTRL-D> <CTRL-D> 然后创建tar归档文件: $ sudo …

13
在sql和应用程序中执行sql的利弊是什么
shopkeeper 该表具有以下字段: id (bigint),amount (numeric(19,2)),createddate (timestamp) 假设我有上表。我想获取昨天的记录,并通过将金额打印为美分来生成报告。 一种方法是在我的Java应用程序中执行计算并执行一个简单的查询 Date previousDate ;// $1 calculate in application Date todayDate;// $2 calculate in application select amount where createddate between $1 and $2 然后遍历记录,并将金额转换为我的Java应用程序中的美分并生成报告 另一种方法类似于在sql查询本身中执行计算: select cast(amount * 100 as int) as "Cents" from shopkeeper where createddate between date_trunc('day', now()) - interval '1 day' …


4
是什么导致错误:没有唯一的约束条件匹配给定表的键?
下面的示例表结构给出了一个错误:没有唯一的约束条件匹配给定表的键,并且盯着它看了好一会儿,现在我不知道为什么在这种情况下会出现此错误。 BEGIN; CREATE TABLE foo ( name VARCHAR(256) PRIMARY KEY ); CREATE TABLE bar( pkey SERIAL PRIMARY KEY, foo_fk VARCHAR(256) NOT NULL REFERENCES foo(name), name VARCHAR(256) NOT NULL, UNIQUE (foo_fk,name) ); CREATE TABLE baz( pkey SERIAL PRIMARY KEY, bar_fk VARCHAR(256) NOT NULL REFERENCES bar(name), name VARCHAR(256) ); COMMIT; 运行上面的代码会给出以下错误,对我来说这没有意义,任何人都可以解释为什么会出现此错误。我正在使用postgres 9.1 …
154 sql  postgresql 


9
PostgreSQL-将varchar列的大小更改为较短的长度
我ALTER TABLE对一个非常大的表(近3000万行)上的命令有疑问。它的一列是a varchar(255),我想将其调整为a varchar(40)。基本上,我想通过运行以下命令来更改列: ALTER TABLE mytable ALTER COLUMN mycolumn TYPE varchar(40); 如果过程很长,我没有问题,但是在ALTER TABLE命令期间似乎我的表不再可读。有没有更聪明的方法?也许添加一个新列,从旧列中复制值,删除旧列,最后重命名新列? 任何线索将不胜感激!提前致谢, 注意:我使用PostgreSQL 9.0。

20
PSQLException:当前事务中止,命令被忽略,直到事务块结束
我在JBoss 7.1.1 Final的server.log文件中看到以下(截断的)堆栈跟踪: Caused by: org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:302) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_23] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_23] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_23] at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_23] at org.postgresql.ds.jdbc23.AbstractJdbc23PooledConnection$StatementHandler.invoke(AbstractJdbc23PooledConnection.java:455) at $Proxy49.executeUpdate(Unknown Source) at org.jboss.jca.adapters.jdbc.WrappedStatement.executeUpdate(WrappedStatement.java:371) …


4
PostgreSQL为什么对索引列执行顺序扫描?
非常简单的示例-一个表,一个索引,一个查询: CREATE TABLE book ( id bigserial NOT NULL, "year" integer, -- other columns... ); CREATE INDEX book_year_idx ON book (year) EXPLAIN SELECT * FROM book b WHERE b.year > 2009 给我: Seq Scan on book b (cost=0.00..25663.80 rows=105425 width=622) Filter: (year > 2009) 为什么不执行索引扫描呢?我想念什么?




6
如何在PostgreSQL中将RETURNING和ON CONFLICT一起使用?
我在PostgreSQL 9.5中具有以下UPSERT: INSERT INTO chats ("user", "contact", "name") VALUES ($1, $2, $3), ($2, $1, NULL) ON CONFLICT("user", "contact") DO NOTHING RETURNING id; 如果没有冲突,则返回以下内容: ---------- | id | ---------- 1 | 50 | ---------- 2 | 51 | ---------- 但是,如果有冲突,则不会返回任何行: ---------- | id | ---------- id如果没有冲突,我想返回新的列,或者返回id冲突列的现有列。 能做到吗?如果是这样,怎么办?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.