Received: from maia.hub.org (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 560A5632A55 for ; Mon, 4 Jan 2010 17:47:54 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 84458-05 for ; Mon, 4 Jan 2010 21:47:43 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-fx0-f227.google.com (mail-fx0-f227.google.com [209.85.220.227]) by mail.postgresql.org (Postfix) with ESMTP id 6D5966325AB for ; Mon, 4 Jan 2010 17:47:43 -0400 (AST) Received: by fxm27 with SMTP id 27so1201645fxm.3 for ; Mon, 04 Jan 2010 13:47:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:from:to:subject:date :message-id:mime-version:content-type:content-transfer-encoding :x-mailer:content-language:thread-index; bh=fiVWoiMpvuqTkuBwRViKbkmJpaI12WJb0CXUJQziwaw=; b=FWbMQC9SLDiYsm6H8lFuIqC7bfNejnk8CjTix65FB98/wIkFGAZdeCBIDlYOcPt4Zl dgNZ20S4fQ8LYHi3aqKEUNcdyLSsP8wL6OH7HM4OI86DxN1x45LOqJcn6hKyUANoTNLx Ap+SXF5os403GDA5/SfZ1+uAJias/aquxMl1g= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:from:to:subject:date:message-id:mime-version:content-type :content-transfer-encoding:x-mailer:content-language:thread-index; b=mZRD1LMIGdciGOud2xe7lqzyAjDunKKmzvvLdBuf+UQXtdnhCeOiqOxYrtgKXu7qUw LvMxCCZR79CghgTttHuk7J81T5woOyhRpf32OJ02uJZHil0fMnVdXB5iJxbkUDk3RGcb jttzCX3pFKVbpj9NRKYKpgNQjwZ+CFsvRAfe0= Received: by 10.223.145.129 with SMTP id d1mr194258fav.99.1262641661215; Mon, 04 Jan 2010 13:47:41 -0800 (PST) Received: from Stargate7 (217.64ec54.tvnetwork.hu [84.236.100.217]) by mx.google.com with ESMTPS id d13sm27298278fka.47.2010.01.04.13.47.39 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 04 Jan 2010 13:47:40 -0800 (PST) From: =?iso-8859-2?Q?Keresztury_Bal=E1zs?= To: Subject: forced sequential scan when condition has current_user Date: Mon, 4 Jan 2010 22:47:37 +0100 Message-ID: <000f01ca8d87$88e71f30$9ab55d90$@hu> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Office Outlook 12.0 Content-Language: hu Thread-Index: AcqNh4f2gu1cCG5xSkGKVHZTq8Ycsw== X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=3.189 tagged_above=-10 required=5 tests=BAYES_50=0.001, FH_DATE_PAST_20XX=3.188 X-Spam-Level: *** X-Archive-Number: 201001/19 X-Sequence-Number: 36899 hi, just a small question: is it normal that PostgreSQL 8.4.1 always uses sequential scanning on any table when there is a condition having the constant "current_user"? Of course there is a btree index set on that table, but the DBMS just doesn't want to utilize it. When I replace current_user to any string, the planner uses the index normally. I can demonstrate it with the following simple query: SELECT psz.kotesszam FROM projekt.projektszervezet psz WHERE psz.felhasznalo_id = current_user; Explain analyze: "Seq Scan on projektszervezet psz (cost=0.00..255.07 rows=42 width=9)" " Filter: ((felhasznalo_id)::name = "current_user"())" Metadata: CREATE TABLE "projekt"."projektszervezet" ( CONSTRAINT "projektszervezet_pkey" PRIMARY KEY("kotesszam", "felhasznalo_id"), CONSTRAINT "projektszervezet_fk_felhasznalo" FOREIGN KEY ("felhasznalo_id") REFERENCES "felhasznalo"."felhasznalo"("felhasznalo_id") ON DELETE RESTRICT ON UPDATE RESTRICT NOT DEFERRABLE, CONSTRAINT "projektszervezet_fk_projekt" FOREIGN KEY ("kotesszam") REFERENCES "projekt"."projekt"("kotesszam") ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE, CONSTRAINT "projektszervezet_fk_szerep" FOREIGN KEY ("szerep_id") REFERENCES "felhasznalo"."szerep"("szerep_id") ON DELETE RESTRICT ON UPDATE RESTRICT NOT DEFERRABLE ) INHERITS ("projekt"."projektszervezet_sablon") WITH OIDS; CREATE INDEX "projektszervezet_idx_felhasznalo_id" ON "projekt"."projektszervezet" USING btree ("felhasznalo_id"); CREATE INDEX "projektszervezet_idx_kotesszam" ON "projekt"."projektszervezet" USING btree ("kotesszam"); CREATE TRIGGER "projektszervezet_archivalas" BEFORE UPDATE OR DELETE ON "projekt"."projektszervezet" FOR EACH ROW EXECUTE PROCEDURE "public"."projektszervezet_archivalas_trigger"(); CREATE TRIGGER "projektszervezet_idopecset" BEFORE UPDATE ON "projekt"."projektszervezet" FOR EACH ROW EXECUTE PROCEDURE "public"."idopecset_trigger"(); CREATE TRIGGER "projektszervezet_naplozas" BEFORE INSERT OR UPDATE OR DELETE ON "projekt"."projektszervezet" FOR EACH ROW EXECUTE PROCEDURE "public"."projektszervezet_naplozas_trigger"(); Inherited table: CREATE TABLE "projekt"."projektszervezet_sablon" ( "kotesszam" VARCHAR(10) NOT NULL, "felhasznalo_id" VARCHAR NOT NULL, "szerep_id" VARCHAR(3), "felvivo" VARCHAR DEFAULT "current_user"() NOT NULL, "felvitel_idopont" TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL, "modosito" VARCHAR, "modositas_idopont" TIMESTAMP WITHOUT TIME ZONE, "elso_felvivo" VARCHAR DEFAULT "current_user"() NOT NULL, "elso_felvitel_idopont" TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT now() NOT NULL ) WITH OIDS; CREATE TRIGGER "projektszervezet_idopecset" BEFORE UPDATE ON "projekt"."projektszervezet_sablon" FOR EACH ROW EXECUTE PROCEDURE "public"."idopecset_trigger"(); Thanks! Balazs