Обсуждение: Max number of rows in a table
> --- Tom Lane <tgl@sss.pgh.pa.us> wrote: > Actually you can only have 4 billion SQL commands per xid, because the > CommandId datatype is also just 32 bits. I've never heard of anyone > running into that limit, though. > Wouldn't the above put a limit on a number of records one could have in table? One have to use pg_dump/pg_restore to be able to upgrade between pgSql releases and/or to backup data. If one cannot backup data and/or upgrade between pg releases, then 4B records is the effective limit on the number of records in pgSql ... or am I missing something? Thanks __________________________________ Do you Yahoo!? Free Pop-Up Blocker - Get it now http://companion.yahoo.com/
ow <oneway_111@yahoo.com> writes:
>> --- Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Actually you can only have 4 billion SQL commands per xid, because the
>> CommandId datatype is also just 32 bits. I've never heard of anyone
>> running into that limit, though.
> Wouldn't the above put a limit on a number of records one could have
> in table?
No.
regards, tom lane
--- Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Wouldn't the above put a limit on a number of records one could have > > in table? > > No. If I understand correctly, a table that has 4B+ rows cannot be restored after the dump and that, in turn, may/will affect the ability to upgrade to new versions of pgSql. This is somewhat similar to saying "yes" to the question "Can I drive this car at 55 mph?" and then forgetting to mention that the brakes will fail if the car reaches 55 mph. Thanks __________________________________ Do you Yahoo!? Free Pop-Up Blocker - Get it now http://companion.yahoo.com/
On Mon, 1 Dec 2003, ow wrote: > > --- Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Actually you can only have 4 billion SQL commands per xid, because the > > CommandId datatype is also just 32 bits. I've never heard of anyone > > running into that limit, though. > > > > Wouldn't the above put a limit on a number of records one could have in table? > One have to use pg_dump/pg_restore to be able to upgrade between pgSql releases > and/or to backup data. If one cannot backup data and/or upgrade between pg > releases, then 4B records is the effective limit on the number of records in > pgSql ... or am I missing something? I'd expect copy to be a single command, no matter how many rows were copied.
Stephan Szabo <sszabo@megazone.bigpanda.com> writes: > I'd expect copy to be a single command, no matter how many rows were > copied. It might prevent you from using pg_dump --inserts ? -- greg
ow <oneway_111@yahoo.com> writes:
> If I understand correctly, a table that has 4B+ rows cannot be restored after
> the dump and that, in turn, may/will affect the ability to upgrade to new
> versions of pgSql.
You don't understand correctly.
regards, tom lane
--- Tom Lane <tgl@sss.pgh.pa.us> wrote: > ow <oneway_111@yahoo.com> writes: > > If I understand correctly, a table that has 4B+ rows cannot be restored > after > > the dump and that, in turn, may/will affect the ability to upgrade to new > > versions of pgSql. > > You don't understand correctly. I see. Thanks __________________________________ Do you Yahoo!? Free Pop-Up Blocker - Get it now http://companion.yahoo.com/
Clinging to sanity, oneway_111@yahoo.com (ow) mumbled into her beard:
> --- Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> > Wouldn't the above put a limit on a number of records one could have
>> > in table?
>>
>> No.
>
> If I understand correctly, a table that has 4B+ rows cannot be restored after
> the dump and that, in turn, may/will affect the ability to upgrade to new
> versions of pgSql.
>
> This is somewhat similar to saying "yes" to the question "Can I drive this car
> at 55 mph?" and then forgetting to mention that the brakes will fail if the car
> reaches 55 mph.
No, you are NOT understanding correctly.
Restoring a table from pg_dump generally involves _ONE_ command.
For instance, the following is what pg_dump generates for my table, "stocks."
COPY stocks (symbol, description, exchange) FROM stdin;
AADBX AADBX NYSE
AADEX AADEX NYSE
AAIEX AAIEX NYSE
BTS.A BTS.A TSX
CTSTK TD Canadian Equity CTE
CASH CASH TSX
CTAMER TD AmeriGrowth RSP CTE
CTASIA TD AsiaGrowth RSP CTE
CTEMER TD Emerging Markets RSP CTE
CTEURO TD European Growth RSP CTE
CTIBND TD Global RSP Bond CTE
FDIVX FDIVX NYSE
FDRXX FDRXX NYSE
FUSEX FUSEX NYSE
MOT MOT NYSE
NCX NOVA Chemicals Corporation TSX
NT NT NYSE
PCA Petro Canada TSX
RY Royal Bank of Canada TSX
TOC Thomson Corporation TSX
TRP TransCanada PipeLines Limited TSX
WORKVE Working Ventures OTHER
CTSPEC TD SPECIAL EQUITY CTE
CTUSEQ TD US EQUITY CTE
CTMM TD MONEY MARKET PL CTE
CTCBOND TD Canadian Bond CTE
\.
Recovery from this involves the SQL processor using ONE transaction
ID, and ONE SQL statement. If there were 8 billion rows in the table,
whatever other challenges there might be, it would still use ONE
transaction ID and ONE SQL statement.
What is there about "This involves just one SQL statement" that isn't
making sense?
--
wm(X,Y):-write(X),write('@'),write(Y). wm('cbbrowne','acm.org').
http://www.ntlug.org/~cbbrowne/lisp.html
Pagers are cases for holding dead batteries. -Richard Wolff
Greg Stark <gsstark@mit.edu> writes:
> Stephan Szabo <sszabo@megazone.bigpanda.com> writes:
>> I'd expect copy to be a single command, no matter how many rows were
>> copied.
> It might prevent you from using pg_dump --inserts ?
Not even that, unless you *also* modified the dump output to wrap
BEGIN/END around it. Otherwise each INSERT is a separate xid.
(Of course you could definitely take a pretty long coffee break while
waiting for a 4-billion-row table to be restored with INSERTs. Also
I think it would be necessary to run VACUUM partway through to avoid
transaction wraparound issues. pg_autovacuum could be expected to
take care of that for you, if it were running. But in practice anyone
sane would use COPY for this, anyway.)
regards, tom lane