我使用的是PostgreSQL v9.0.1与Rails(和它的DEPS)@ v2.3.8,由于使用的Postgres的全文能力,我有被定义为表:
CREATE TABLE affiliate_products (
    id integer NOT NULL,
    name character varying(255),
    model character varying(255),
    description text,
    price numeric(9,2),
    created_at timestamp without time zone,
    updated_at timestamp without time zone,
    textsearch_vector tsvector,
);
注意最后一行,这确保了活动记录是无法与标准架构自卸车处理它,所以我必须设置config.active_record.schema_format = :sql在./config/environment.rb; 并使用rake db:test:clone_structure而不是rake db:test:clone.
这些都不是太了不起,只是不方便 - 但是rake db:test:clone_structure错误却失败了:
ERROR:  must be owner of language plpgsql
因为#16我的结果./db/development_schema.sql:
CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql;
在超级用户安装PostgreSQL v9.0+ …
我有这些表:
event (evt_id, evt_code, reg_id) magnitude (mag_id, evt_id, value) trace (trace_id, pt_id) point (pt_id, evt_id)
我想删除所有与之相关的表中的所有行evt_id=1139.
我该怎么做?
如何为任意用户授予对所有函数和视图的读/选访问权限?
我psql --user=postgres -d mydb -f myview.sql用来创建几个函数和视图,然后我运行:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
Run Code Online (Sandbox Code Playgroud)
获得所有权限后,我希望myuser现在可以访问postgres用户创建的功能和视图.但是,当我尝试访问它们时myuser,我得到了"关系允许拒绝..."错误.为什么是这样?
我试图在存储过程中测试序列是否已经存在.
IF EXISTS SEQUENCE seq_name
    RAISE EXCEPTION 'sequence % already exists!', seq_name
END IF;
Run Code Online (Sandbox Code Playgroud)
我已经尝试过几个不同的片段变形而没有运气.我必须向谷歌提供错误的条款,因为我似乎无法找到关于该主题的任何内容.任何帮助表示赞赏!
我得到了一个大的(> 100M行)Postgres表,其结构为{integer,integer,integer,timestamp without time zone}.我期望一行的大小为3*整数+ 1*时间戳= 3*4 + 1*8 = 20字节.
实际上,行大小pg_relation_size(tbl) / count(*)= 52字节.为什么?
(不对表进行删除:pg_relation_size(tbl, 'fsm')〜= 0)
使用postgres复合类型,您基本上可以构建一个字段,其结构被定义为另一个表.我有一个名为"person"类型的"收件人"的复合字段.在我的特定方案中,此收件人字段通常为空.检查复合字段是否为空的正确方法是什么.我试过了:
select * from bla where recipient is not null
select * from bla where recipient is null
select * from bla where recipient = null
select * from bla where recipient != null
Run Code Online (Sandbox Code Playgroud)
在所有这些情况下,它都不会返回任何内容.那么如何正确检查复合值是否为空?
UPDATE
经过一些阅读后,看起来这是我的问题:
人们可能认为
!(x IS NULL) = x IS NOT NULL在所有情况下都是如此.但是有一个例外 - 复合类型.当复合值的NULL一个字段是另一个字段时NOT NULL,则两个运算符的结果都为假.IS NULL是真的,只有当所有的领域都是NULL.IS NOT NULL是真的,只有当所有的领域都是NOT NULL.对于介于两者之间的任何情况,两个运算符都返回false.
我确实有一些空字段,有些字段不是.我希望如果复合字段中的任何项不为null,则该字段将被视为非NULL,而不是当所有项都不为空时.除了检查每个字段之外还有什么方法吗?
我需要将结果数据从PostgreSQL中的查询导出到Excel/CSV.
我用PostgreSQL 8.2.11.
SQL error:
ERROR:  relative path not allowed for COPY to file
In statement:
COPY (select distinct(m_price) from m_product)TO '"c:\auto_new.txt"';
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来运行查询以查找Postgres中表的列的默认值.例如,如果我使用以下查询创建了一个表:
**编者注:我修改了表定义,因为它对问题没有影响.
CREATE TABLE mytable (
    integer int DEFAULT 2,
    text varchar(64) DEFAULT 'I am default',
    moretext varchar(64) DEFAULT 'I am also default',
    unimportant int 
);
Run Code Online (Sandbox Code Playgroud)
我需要一个查询,告诉我,在某种格式中,默认值integer是2,text是'我是默认',并且moretext'我也是默认'.查询结果可以包含任何其他没有默认值的列的任何值,即,unimportant对我的目的而言并不重要,并且根本不重要.
我尝试用java和jpa做函数searchBook.我有2个课程,分别是媒体和书.本书扩展了媒体.我将数据保存在不同的表中.我尝试从下面的查询中选择数据:
TypedQuery<Media> query = em.createQuery(
                "SELECT m.title, b.isbn, b.authors"
                        + " FROM Book b, Media m" + " WHERE b.isbn = :isbn"
                        + " OR lower(m.title) LIKE :title"
                        + " OR b.authors LIKE :authors", Media.class);
        query.setParameter("isbn", book.getisbn());
        query.setParameter("title", "%" + book.getTitle().toLowerCase()
                + "%");
        query.setParameter("authors", "%" + book.getAuthors() + "%");
        bookList = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:
java.lang.IllegalArgumentException:无法为具有多个返回的查询创建TypedQuery
这是我第一次使用JPA.我找不到错误.
我在PostgreSQL中有两个相同长度的数组值:
{a,b,c} 和 {d,e,f}
我想把它们结合起来
{{a,d},{b,e},{c,f}}
有没有办法做到这一点?
postgresql ×10
sql ×6
plpgsql ×2
activerecord ×1
arrays ×1
composite ×1
database ×1
default ×1
file-io ×1
foreign-keys ×1
grant ×1
java ×1
jpa ×1
null ×1
pgadmin ×1
ruby ×1
sql-delete ×1
storage ×1
types ×1