Slashdot Mirror


PostgreSQL 7.3 Released

rtaylor writes "Nearly a year's worth of work is out. The new tricks include schema support, prepared queries, dependency tracking, improved privileges, table (record) based functions, improved internationalization support, and a whole slew of other new features, fixes, and performance improvements. Release Email - Download Here - Mirror FTP sites (at bottom)."

30 of 315 comments (clear)

  1. Question by altaic · · Score: 1, Informative

    I've heard this is the best SQL server around. Is it really better than MySQL?

    1. Re:Question by h2so4 · · Score: 4, Informative

      For "simple" stuff, MySQL is (supposedly) quicker than PostgreSQL but you might want to check the following link for just why MySQL sucks for non-toy apps

    2. Re:Question by ruckc · · Score: 3, Informative

      That article is 2 years old. MySQL has advanced greatly since. The author of that paper seems to suggest that the only reason to not use MySQL is for its lack of transactions. Well boys it is in and works great.

    3. Re:Question by dhogaza · · Score: 5, Informative

      That article's very much out of date, as is stated in an addendum at the top and as is made clear in the later posts in the discussion of the piece.

      I'm the OpenACS project manager so want to make sure that people understand that the piece (and much of the commentary) was accurate when written, but that it was written many moons ago. However, nowadays MySQL has the InnoBase backend which provides full transaction support, and has seen other major improvements.

      Our project only supports Oracle and PostgreSQL, and I still feel MySQL is lacking in many areas, but it has improved greatly in the last couple of years.

      So has PostgreSQL, of course! We love it ...

  2. Dropping Columns finally supported by limekiller4 · · Score: 5, Informative

    WOOHOO!

    DROP COLUMN [column] FROM TABLE [table];

    This up-until-now lacking feature has been the bane of my existence. I HATE cruft being left lying around.

    (btw, I don't know if that is the correct syntax, just a guess)

    --
    My .02,
    Limekiller
    1. Re:Dropping Columns finally supported by BlueUnderwear · · Score: 3, Informative
      (btw, I don't know if that is the correct syntax, just a guess)

      Not sure whether it's the same in Postgresql, but in oracle, it would be:

      ALTER TABLE [table] DROP COLUMN [column];
      --
      Say no to software patents.
    2. Re:Dropping Columns finally supported by Anonymous Coward · · Score: 2, Informative
    3. Re:Dropping Columns finally supported by rtaylor · · Score: 3, Informative

      Not to mention in PostgreSQL almost all DDL statements (like Drop Column) are transactional -- which adds a touch of added complexity.

      --
      Rod Taylor
    4. Re:Dropping Columns finally supported by kcbrown · · Score: 3, Informative
      And you can rename tables and colums on the fly too!

      Oh, it's even better than that. You can do these things within transactions. If you rename a table within a transaction and abort the transaction, it's as if the rename never took place.

      This is very cool stuff. I suspect that dropping columns works the same way. It means that you can do things like exchange table names atomically.

      --
      Use 'slashdot stuff' in the subject line in any email you send me if you want to get past the spam filter.
    5. Re:Dropping Columns finally supported by WasterDave · · Score: 3, Informative

      The answer to all the above is: You are going to have to put in some effort, sorry. The Microsoft curve always runs easier at the start and harder as time goes on. The Unix curve generally loses some wizards and other gumpf in exchange for a need to get a bit low down and grunty. It'll take you longer to get going, but when it's up you'll understand *why* things are they way they are and how to maintain it in the long term. Harder at the start, easier as time goes on.

      I guess it depends where your head sits.

      Dave

      --
      I write a blog now, you should be afraid.
    6. Re:Dropping Columns finally supported by zulux · · Score: 5, Informative



      1. I recently did an Access to MS SQL conversion and ended up with an access database in .adp format which contained the connection string to the SQL server and required no ODBC setup on the clinet PC's. Is this similar in Postgre?

      Nope, You do need a PostgreSQL ODBC driver, but the link settings can be managed by your Access databsse if you relink on client startup with a VBA script.

      2. In that conversion, the .adp file contained the forms, reports, and macros. The queries from the old access db were stored on the server either as views or Stored Procedures. Is this also similar (or at least compatible)?

      You can store the queires as views on the PostgreSQL server - no problem there. In 7.3 procedures can return a set of data now - though, I'm waiting for reports from the field to come back and report that it's working well before I jump on it myself.

      3. MS SQL allows you to use your current windows credentials as the authentication to the SQL server. This is nice because then the users don't have to enter/remember another password. Can I do this in Postgre?

      I don't think there is any way you can do that in the PosgreSQL ODBC driver - you could rewire the ODBC link on the fly though. Another login is a pain in the ass, but nobody seems to care. It may be possible to get this to work with a Linux server through PAM - if you can get PostgreSQL to work though PAM. I don't know, though.

      4. I've found that Access generates absolutely horrid SQL. Fortunately, because all these queries are stored on the SQL server, they can be edited/optimized after the conversion. This question ends up being a two-parter. How compatible is Postre with Access' ugly SQL? And if there's a compatability problem with the generated SQL, can I at least edit it server side and make access not care that that's happened?

      Both the PostgreSQL server and ODBC driver can massage the horrid Access built queries into normalacy. Typically you don't have to migrate the queries off of Access and into server views because of this - they just work. It's the KSQO that does the magic, from the docs: Key Set Query Optimizer causes the query planner to convert queries whose WHERE clause contains many OR'ed AND clauses (such as "WHERE (a=1 AND b=2) OR (a=2 AND b=3) ...") into a UNION query. KSQO is commonly used when working with products like MicroSoft Access, which tend to generate queries of this form.

      This hasen't always been the case, Access queries used to crash PostgreSQL a few years ago becuase they were so odd.

      General thoughts on both:
      It takes a *bit* longer to get Access to play with PostgreSQL but once it's there, there are no odd bugs to work out. Upgrade Jet to the latest version on the clinet boxes, and set the ODBC time out in the regestry from 600 to 0 - there's a bug in the way Access relinks to a timed-out ODBC session, so by setting the timeout to 0, it never times out.
      The Access/ODBC driver sometimes has problems with creating a record using contininous forms - any new record should be created using VBA rather than by filling out the blank entry in an Access continuis form or list of records.

      Good luck - I've been very happy with the migration myself.

      Oh, setup an hourly cron job to dump the database to a file then gzip it and stash it on a NFS server. Easy hourly backups! Never had to use them, but it's nice to know that we'll never loose more than an hours worth of work!

      --

      Moneyed corporations, non-working 'poor' and criminal prisoners are turning productive citizens into tax-slaves.

    7. Re:Dropping Columns finally supported by Malcontent · · Score: 3, Informative

      "# In that conversion, the .adp file contained the forms, reports, and macros. The queries from the old access db were stored on the server either as views or Stored Procedures. Is this also similar (or at least compatible)?"

      You had to translate all those queries from access SQL to MS-SQL language right? They are incompatible in many ways. Also many access queries tend to have functions in them like dlookup() all of which won't work in SQL server. SO depending on the complexity of the SQL you will have to translate some of them.

      "# MS SQL allows you to use your current windows credentials as the authentication to the SQL server. This is nice because then the users don't have to enter/remember another password. Can I do this in Postgre?"

      You can embed a username and a password in the ODBC driver and have everybody log in as the same user or you can write some VB code to get the user name from the windows login and make right registry hacks. Not too big of an ordeal.

      " 4. I've found that Access generates absolutely horrid SQL. Fortunately, because all these queries are stored on the SQL server, they can be edited/optimized after the conversion. This question ends up being a two-parter. How compatible is Postre with Access' ugly SQL? And if there's a compatability problem with the generated SQL, can I at least edit it server side and make access not care that that's happened?"

      Pretty much the same as SQL server. You can create stored procedures or views and link them up like tables. Study up on the postgres RULE system. It basically allows you to create views with code and also makes all views writable if you want to code the writes.

      Look into SQL Porter http://www.realsoftstudio.com/ordersqlporter.php it might save you a ton of work and it does not cost a lot of money.

      You can also use "pass through" queries to take advantage of postgres features like regular expressions and such.

      --

      War is necrophilia.

  3. Re:Shocking arrogance by the+eric+conspiracy · · Score: 4, Informative

    Do you want to live in a world where things like the GUI, 3D graphics, wordprocessing, webserving, and other commercial products were never developed?

    With the exception of wordprocessing all of the innovations you cite were developed by academic R&D teams, NOT by commercial software vendors.

    This one exception, wordprocessing was NOT an innovation arising from the computer revolution - it's roots go back to IBM Selectric Magcard typewriters.

    All the commercial vendors have done is copy, copy and copy.

    Citations:

    GUI - Stanford Research Institute Augmentation Center
    Wordprocessing - IBM Typewriter Division
    3D graphics - Evans and Sutherland, UofUtah and Harvard
    Webserving - T. Berners Lee, CERN

    The fact is that if the closed source behemouths were to dry up and blow away, it would probably enhance innovation by reducing the barriers to entry in the marketplace imposed by the likes of Microsoft.

    After all, what VC is going to fund a new wordprocessor these days? VC's know all to well what Microsoft would do to any new market entrant that starts to gain traction. They have the horrible example of Netscape to look back on.

  4. Re:Go on then. by kcbrown · · Score: 5, Informative
    Cue all the people telling us why it's better than MySQL.

    Well, if you insist... :-)

    It's better for certain things (most things, actually). PostgreSQL is a bit more feature-complete as a SQL database than MySQL is. MySQL is improving, certainly: it now has transactions and such. But PostgreSQL has quite a bit more: triggers, rules, stored procedures, and views, for instance.

    In terms of speed, MySQL is faster for certain specific operations but that speed comes at the price of database integrity: the lack of rules and triggers means that it is not possible for the database to enforce consistency between tables. One must thus trust applications to do the right thing, which is generally not wise.

    It's like the difference between an OS with memory protection and one without. The one without may be faster for certain things, since the OS doesn't have to worry about messing with page tables and dealing with page faults of various kinds, but the price is that you now have to trust the applications running under the OS to do the right thing and not touch memory that doesn't belong to them.

    As I said, MySQL is faster for certain things. But PostgreSQL is reportedly better at handling lots of concurrent transactions than MySQL. It's not clear, then, that MySQL is much better than PostgreSQL, if at all, under high load situations. And if it isn't, then there's really little reason to go with it over PostgreSQL.

    Finally, even if MySQL is faster, it's not likely to be so much faster that it is the difference between success and failure. And I can tell you this: experience shows that the initial requirements of a project are often vastly different, and usually much less demanding, than the final requirements for the same project. So it makes more sense to go with the most capable database backend you can lay your hands on, as long as it remains within your budget (your real budget: remember that you're likely to spend a lot more money than you expected, if only because the requirements will change over time). That means going with PostgreSQL over MySQL, if given the choice. You have to make the decision early because changing your database engine mid-project is extremely difficult, especially if your code was written to work around the limitations of the database engine, as it almost certainly will if you're using MySQL.

    These days I don't think the question should be whether you should go with PostgreSQL instead of MySQL. It should be whether you should go with MySQL instead of PostgreSQL. PostgreSQL should be the default choice these days, because it is so much more capable at the same price.

    --
    Use 'slashdot stuff' in the subject line in any email you send me if you want to get past the spam filter.
  5. Re:Im not trolling but..... by symbolic · · Score: 5, Informative


    If mysql is 'borking' at anything over 8000 rows, I'd take a real hard look at my design if I were you. I did a conceptual demo for a client once, where we sucked up a raw data file from their mainframe - 65000 rows, five tables, and the largest table had about 18 columns. The import took all of 45 seconds, and there was absolutely no performance problems of any kind. This was being assessed to determine how much faster this would have been compared to a RAD-based solution they were currently using. But 65,000 rows is small potatoes.

  6. Re:table (record) based functions by rtaylor · · Score: 3, Informative

    Thats exactly what it means..

    SELECT * FROM function()...

    --
    Rod Taylor
  7. Er, not really by oGMo · · Score: 5, Informative
    That article is 2 years old. MySQL has advanced greatly since.

    No, it hasn't. A summary of the list of missing features:

    • No subselects
    • No SELECT INTO TABLE
    • No stored procedures and triggers
    • No Foreign Keys (!!)
    • No views
    • No -- as a comment parameter

    Of course, they give crap rationalizations for each, and/or that "it's planned for [distant version of MySQL]". Of these features, only the last might be considered trivial, and even that is quite a pain if you're trying to write some portable SQL.

    The others, particularly the lack of triggers and foreign keys, make this a data integrity nightmare for anything nontrivial.

    Sure, sure, "but you can do it all in code": typical response. You know, that was their response to lack of transactions, too. "Too slow", "you don't need those". Right. You could just write a whole database in your code, too. The point of using a RDBMS (and, lacking relations of any sort, makes MySQL just a DBMS) is reliability so you don't have to constantly worry about these things.

    PostgreSQL has all of the above features, and quite a few more. It's an OORDBMS. (Yes, this is very cool, and lets you do some very nifty things.) It's got better-than-row-level-locking (MVCC; MySQL does table locking only.) And all the other things people have mentioned here.

    MySQL is a toy database, and should be treated as such. Not just for transactions: for all the things that make a robust RDBMS.

    --

    Don't think of it as a flame---it's more like an argument that does 3d6 fire damage

  8. Re:Quick question by Sokie · · Score: 3, Informative

    Postgres has had stored procedures for a while, look up CREATE FUNCTION. But adding better support for result sets does make them quite a bit more useful, now if only there was a decent JDBC driver that implemented result sets more completely.

    -Sokie

    --
    ------
    Where are the slash-groupies? I distinctly remember being promised slash-groupies!
  9. Re:unicode support and proper collation by Giant+Robot · · Score: 3, Informative

    When I installed postgresql 7.2.x, unicode was supported automatically! I use it to store chinese and japanese text in a dictionary type lookup database.

    The beauty was that the java code would automatically convert the original Big5/JIS/other encodings to UTF8 first, and then JDBC would store the unicode into postgresql.

  10. Re:Go on then. by abirdman · · Score: 4, Informative
    Here's just one example:
    create view [viewname] as [query]
    Over time data structures in a database are invariably found to be "less than conducive" to all the data and report requests that pile up on the typical DB specialist's desk. Some VP of marketing decides he needs a report that shows distributions of product lines by sales period or something. No problem, we create a tortured multi-table join, often with unions (oops, can't do that in MySQL, use intermediate tables instead), inner joins, and sub-selects (oops, can't do that in MySQL either, have to create some more intermediate tables), but eventually, voila, here's the new marketing report.

    Now, everyone joins the VP-MKTG's bandwagon and wants their new reports compiled and summarized that way. In MySQL, without support for views, every query ends up having to be constructed again, including the tortured logic involved in having no sub-selects or unions. With view support, all we need to do is toss that awful query into a view, and select out of the view. It's not gorgeous, but it works. And you can even hand off the view to the other developers, so they don't get stuck in the quicksand of recreating the logic from scratch.

    And now, because PostgreSQL supports functions that return datasets, we can toss all that logic into a function, and call that instead.

    So, in answer to the question of what can PostgreSQL do that MySQL can't do: unions, subselects, views, functions. All are time savers. Lacking them, we can devise work arounds, but having them is very, very nice.
    --
    Everything I've ever learned the hard way was based on a statistically invalid sample.
  11. Re:Shocking arrogance by telecaster · · Score: 3, Informative

    We've been running Postresql in production for over 3 years, we have hudreds of thousands of rows for each customer that uses our product. Fast? Please, it screams. Our initial choice was Oracle, but we couldn't eat the cost, it would have cost about $12,000 just for one server -- nuts if you ask me.
    We chose PG because it had 90% of what Oracle had and less the fat. Postgresql is far easier to get running and far better on the memory footprint, it runs in around 8mb's... big whoop. If you know anything about Oracle, its hardly good about memory, and one bitch of a product to get running (right).
    Lastly, I'll say this about Postgres, its in our opinion, and this is from 20 years of experience with Oracle (I go back to the Oracle 6.24 days when I worked for Prime Computer and ported Oracle to the 50 Series machines for Prime), that Postgres is much more stable out of the box on Linux than Oracle could ever be, Oracle is as buggy as it gets, and don't let Larry fool you. Its got bugs.

    As far as this dude throwing shit at open source and saying that the commercial counterpart is better? Possibly, on the desktop you might be on to something, but I firmly believe that you CAN'T beat PHP, Apache and Postgresql as an application platform for 99% of the Web world out there. The three products in question that I mentioned are far better products than ANYTHING on the commercial market right now... And yes, they are Open Source.

  12. Re:online backup? by telecaster · · Score: 2, Informative

    Yes its got a very good back up system.
    pg_dump, which is by far the ONLY way i'd want to back up. Not only does it dump your data, but it dumps your tables, views, stored proc's, etc. And to re-recreate your database, you simply import the script...
    Now if your talking replication? Thats a different story.

  13. Re:Related question re. Database development by zulux · · Score: 3, Informative


    Unfotrunatly there is no all-in-one rapid developemnt and flat-file database rolled into one, like Access, in the Unix world. But don't let that stop you from using Access though - it's a great tool for rapid development.

    I use it all the time - you rapidly develope the small database, and when it outgrown the Access flat-file .mdb sotrage on about the fith concurent user, migrate the backend database to PostgreSQL and keep the Access front end. Once, the database get's really popular, migrate the Access front end over to Delphiand keep the PostgeSQL back end. The Access to Delphi transition should be done in stages - migrate the data enrty first, then migrate the reporting later.

    Once that is donem and your database is really popular - migrate the front end again to Delphi to Delphi/Kylix and you'll be able to support Linux/FreeBSD and Windows desktops. People can VNC into a FreeBSD server that shares the Kylix app over VNC for other systems - Solaris, Mac, Psion.

    Cool stuff.

    --

    Moneyed corporations, non-working 'poor' and criminal prisoners are turning productive citizens into tax-slaves.

  14. Re:Question. I cry foul! by scheme · · Score: 3, Informative
    These include: full-text search, replication between a master and many slaves and several new table handlers that support large files and transactions

    What they don't tell you is if you use innodb tables for transactions, you won't be able to back up your database without shutting mysql down unless you buy the innodb hot backup tool. So yeah, they have transactions it just doesn't work well with doing backups on your data.

    Are record locks [mysql.com] really a non-existent issue? Maybe the MySql user manual can shed some light on that point: "Performing a read in share mode means that we read the latest available data, and set a shared mode lock on the rows we read."

    Postgresql has mvcc (multiversion concurrency control) meaning that readers or writers don't block other readers or writers from accessing the same data.

    The stored procedures and triggers are not here yet. Thank goodness something in that old link doesn't need to be refuted!

    If you are going to start talking about vapor features then what about postgresql's plans to support point in time recoveries (pitr), redo logs, savepoints, and full clustering with multiple masters.

    Incidentally, the link you point to says that stored procedures are planned for version 5 of mysql. Mysql is currently on version 3 with development work being done on version 4. Version 5 is a long time off. Triggers are something that the mysql developers will consider, and are not guaranteed to be implemented.

    Getting back to what is present in the software now, mysql doesn't support stored procedures or triggers. Postgresql meanwhile supports triggers, stored procedures (written in python, perl, or sql), and rules (which allow you to intercept and rewrite sql queries).

    --
    "When you sit with a nice girl for two hours, it seems like two minutes. When you sit on a hot stove for two minutes, it
  15. What the MySQL'ers dont understand by esconsult1 · · Score: 5, Informative

    The thing that makes Postgresql completely different from MySQL is that it is an *active* RDBMS. By active, I mean that you can set it up so if it gets certain kinds of data, it can operate on that data to create new records, delete records, update other tables etc.

    Postgresql has the *intellegence* built in. You can write all sorts of georgous functions to do stuff, especially if, like us, your shop uses several languages... PHP, Perl, Java, Python, C++, etc. Why replicate your business logic everywhere?

    Transaction support and file/record locking are the least of your problems. If you do serious database stuff, at some point, you are *going* to want VIEWS, TRIGGERS, RULES, and STORED PROCEDURES (functions). Having this functionality in the database engine, instead of in your code makes a heck of a lot of difference when the time comes to scale.

    Coming from a MySQL backgroud in a multi-language shop, we clearly saw the limitations, and decided to switch the entire database platform over to Postgresql a year ago.

    We haven't looked back since.

    1. Re:What the MySQL'ers dont understand by bwt · · Score: 3, Informative

      Generally, you are right that "business logic" should be in the middle tier. A middle tier should have business logic, but there are a LOT of tasks that use SQL besides business logic.

      For the data intensive operations used within the business logic, it is often helpful to encapsilate the data access using an API that resides in the database. This stops large amount of data going across the network. For example, an order fulfilment system might have a middle tier that decided whether an order could be shipped. It might call a "get_backordered_part_count" function and make a series of decisions based on the result.

      Implementing that function in the middle tier accomplishes nothing because the same SQL hits the DB either way. If the logic in the function is complicated and can only be coded with several SQL statements, the extra network traffic and server round trips can be unacceptable.

      A lot of other situations call for Stored procedures and triggers. For example, they are appropriate for writing a data integrity layer: if you denormalize your data model for performance, you need to write triggers to enforce the data integrity. Similarly, if you have raw data processing operations as is common for external system interfaces, data load and transformation operations, periodic jobs etc then it is good to write these in the data layer unless you'd rather push lots of extra data across the network for no identifiable reason.

  16. Not hard by einhverfr · · Score: 4, Informative

    Prior to 7.3, I used to do most of my prototyping in MySQL. Then I would convert the database over, and test it, then I would dump, add triggers, etc. and restore.

    There are two scripts that come with PostgreSQL to take a database dump from MySQL and turn it into something you can use with PostgreSQL. So the switch is painless.

    3 cautions, though ;)
    1) PostgreSQL timestams are time-zone independent, and the database manager will correct for timezone if set. So if your timestamps are off by a certain factor, that is probably why.
    2) Timestamp format is different, so you may have to rewrite any time-stamp parsers.
    3) Limit clauses in MySQL are non-standard.

    Coming from someone who supports both ;)

    --

    LedgerSMB: Open source Accounting/ERP
  17. Date intervals ( was Re:Go on then. ) by Anonymous Coward · · Score: 1, Informative

    In recent PostgreSQL, this date addition is simple:

    Number of days since I was born:

    joel@joel=# select current_date - '1972-10-12';
    ?column?
    ----------
    11007
    (1 row)

    Number of days between Christmas 2002 and Valentine's Day:

    joel@joel=# select cast ('2002-12-25' as date) - '2002-02-14';
    ?column?
    ----------
    314
    (1 row)

    [we need to cast at least one as a date explicitly, otherwise PG assumes there are both strings data.]

    Nothing complicated here, kids, move on.

    BTW: for those using now() in PostgreSQL, moving to CURRENT_DATE (or CURRENT_TIMESTAMP to get the time and date) is recommended -- it's less quirky in procedures, and is ANSI standard syntax.

  18. Re:Quick question by GooberToo · · Score: 3, Informative

    Tablespaces. Mostly for performance, I think - we just keep all the indexes in a different tablespace on a different array for less disk seeking.

    Planned for 7.4 IIRC.

    Good Win32 support.

    Planned for 7.4. Seems code is already available, it's just being cleaned up prior toward merge.

  19. Re:How good is the JDBC driver these days by Anonymous Coward · · Score: 1, Informative

    yes. it's been great since 6.3.